2 lwfhunter lwfhunter 于 2016.03.24 21:46 提问

注解注入的bean和从上下文取出的bean不是同一个?

有以下代码,最后比较注入的dao和ApplicationContext
上下文取出的dao,不是同一个。是我哪里有错误吗?
public class SpringApplicationContext implements ApplicationContextAware {

private static ApplicationContext applicationContext;

@Override
public void setApplicationContext(ApplicationContext context)
        throws BeansException {

    applicationContext = context;
}

public static Object getBean(String name) {
    return applicationContext.getBean(name);
}

public static ApplicationContext getApplicationContext(){
    return applicationContext;
}

}

 @Repository(value="helloDao")
public class HelloDao {

    public void save(){
        System.out.println("HelloDao.save");
    }

}

@Service("helloService")
public class HelloService {
@Resource(name = "helloDao")
private HelloDao dao;

public void say() {

    System.out.println(SpringApplicationContext.getBean("helloDao")==dao);//false

    System.out.println("say hello");
}

}

2个回答

u014481698
u014481698   2016.03.25 09:02

对象比较不能用 == 需要用 equse ,==比的是对象名地址。 equse 比的才是引用。

u014481698
u014481698 回复毕小宝: 额,作用域,这个我还真不知道。我一直认为是单例的呢。可能我对spring的使用和理解还不够深吧。
2 年多之前 回复
wojiushiwo945you
wojiushiwo945you 回复风聆水净: 探讨探讨,莫伤和气啊。
2 年多之前 回复
wojiushiwo945you
wojiushiwo945you 回复风聆水净: 不一定是单例啊,可以配置的,prototype作用域:prototype作用域的Bean会导致在每次对该Bean请求(将其注入到另一个Bean中,或者以程序的方式调用容器的getBean
2 年多之前 回复
u014481698
u014481698 回复毕小宝: 我不明白你说的不对指的是什么,spring 的bean都是单例的,是相同对象。而你判断的是两个实例,但是是一个对象。
2 年多之前 回复
wojiushiwo945you
wojiushiwo945you 你说的是不对的,如果是同一个实例,是应该用==的。
2 年多之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.25 09:05

照这么看来应该是不一样的。但是,可以肯定的是所有用注解注入的同一类的属性都是同一个对象。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Spring中从ApplicationContext中获取bean与从bean工厂中获取bean的区别
Spring中从ApplicationContext中获取bean与从bean工厂中获取bean的区别 1.从ApplicationContext中获取bean的方法如下: ApplicationContext  ac = new ClassPathXmlApplicationContext("com/hsp/ioc/beans.xml"); 它的含义是当Spring去装载beans.xml
从ApplicationContex 应用上下文容器中获取bean和从bean工厂容器中获取bean的区别
1.如果使用ApplicationContext ,则配置的bean如果是 singlton不管你用不用,都被实例化.(好处就是可以预先加载,缺点就是耗内存) 2.如果是 BeanFactory ,则当你获取beanfacotry时候,配置的bean不会被马上实例化,当你使用的时候,才被实例(好处节约内存,缺点就是速度) 3.规定: 一般没有特殊要求,应当使用ApplicatioConte
获取spring的上下文,并获取注解的bean方式
package com.stdsoft.wisdomh.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; ...
spring5中防止bean多次注入的注解学习
最近项目中,在spring的配置文件中添加了对bean的注入,然后再dubbo-provider中也加入了对bean的注入。这个时候就会报错提示两个service,导致bean创建不成功。...
spring注解与xml同时使用:bean命名问题及冲突
程序基于spring 依赖注入 public class UserServImpl implements UserServ{ @autowired private UserDao userDao; .... } 1、xml中配置bean id 与类名一致: 整个spring容器有且只有一个UserDao实例,autowired通过类型 byType自动装载,程序正常运行;
注解实现Bean依赖注入
原创内容,转载请注明私塾在线【http://sishuok.com/forum/blogPost/list/0/2545.html】 12.2.1  概述        注解实现Bean配置主要用来进行如依赖注入、生命周期回调方法定义等,不能消除XML文件中的Bean元数据定义,且基于XML配置中的依赖注入的数据将覆盖基于注解配置中的依赖注入的数据。   S
Spring注解注入bean
1@Autowired 默认根据类型找bean,接口直接找实现类 加@Qualifier 根据bean名称,id来找bean。如@Autowired@Qualifier("userService“”) 2@Resource spring 4.2.5版本亲测!!!!!! 默认根据类型找bean,接口直接找实现类 加name属性 根据bean名称,id来找bean。如@Resour
【Spring学习】spring注解自动注入bean
Spring mvc注解用到的配置: <!-- 启用spring mvc 注解 --> <context:annotation-config /> <context:component-scan base-package="cn.itkt"></context:component-scan> 这样的话,在com包及其所有子包下的所有...
spring使用注解注入bean理解
注解实现Bean依赖注入  1.概述        注解实现Bean配置主要用来进行如依赖注入、生命周期回调方法定义等,不能消除XML文件中的Bean元数据定义,且基于XML配置中的依赖注入的数据将覆盖基于注解配置中的依赖注入的数据。   Spring3的基于注解实现Bean依赖注入支持如下三种注解: Spring自带依赖注入注解: Spring自带的一套依赖注入注解
继承关系 在spring的bean注入中的使用
描述:类A 继承自类B ,类A在spring的配置文件中有bean的配置定义,类A的配置定义中引用了其它的bean定义,重要的是,在类B的文件中 setter注入 类A的bean引用的bean同样能够使用。   public class A extends B{ ..... }   public class B { /** * HIAL服务地址 */