我们通常使用lookup方法注入,它可使Spring替换一个Bean的抽象或具体方法,返回查找容器中,其他Bean的结果,被查找的Bean通常是一个non-singleton Bean。
无状态的Bean的作用域一般可以配置成singleton单实例,如果我们向singleton的BeanA注入prototype的BeanB,并希望每次调用BeanA的getBeanB()时都能返回一个新的BeanB,使用传统的注入方式方法将无法实现这样的要求。因为singleton的Bean注入关联Bean的动作只有一次,虽然BeanB的作用域是prototype类型,返回的对象不是最开始注入的那个bean。
如果希望每次调用BeanA的getBeanB()时都能返回一个新的BeanB一种可选的方案是让Bean实现BeanFactoryAware接口,让BeanA能访问容器的引用,以下代码可以实现方式达到目的:
[+] view code
public class Bean_A implements BeanFactoryAware{
private Bean_B bean_B=null;
private BeanFactory beanFactory=null;
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory=beanFactory;
}
public Bean_B getBean_B(){
return beanFactory.getBean("bean_B", Bean_B.class);
}
}
时间: 2024-08-25 18:34:33