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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!