2014-11-04 118 views
2

我正在处理一个代码,其中A类正在使用B类的参数化构造函数构造B类对象。截至目前,B类尚未弹簧注入。要求是我应该始终有类B的新的非单一对象的代码有些看起来是这样的:在Spring中构造函数注入

class A{ 

private List<ClassB> classBList = new ArrayList<ClassB>(); 

void parseInfo(File f, Element e){ 
ClassB b = new ClassB(this,f,e); 
classBList.add(b); 
} 

} 

应该如何我的弹簧配置的样子,如果我必须用Spring来注入B类?

回答

1

定义bean作为原型

<!-- A bean definition with singleton scope --> 
    <bean id="classBBean" class="ClassB" scope="prototype"/> 

来使用ApplicationContext getBean方法,通过传递参数每次创建豆。

class A implements ApplicationContextAware{ 
      private List<ClassB> classBList = new ArrayList<ClassB>(); 
      @Autowired    
      private ApplicationContext appContext; 
      void parseInfo(File f, Element e){ 
        ClassB b = (ClassB)appContext.getBean("classBBean",new Object[]{this,f,e}); 
        classBList.add(b); 
      } 

     } 
+0

感谢您的回答。你能解释一下新的Object [] {this,f,e}是做什么的?它是否调用类B的构造函数? – 2014-11-04 18:04:22

+0

new Object [] {this,f,e}是构造函数参数。你可以参考getBean(String name,Object [] args)方法javadoc。答案中提供了超链接。 – Sangeeth 2014-11-05 05:17:00

1

如果我理解正确,你是问关于Spring作用域

基本上,你需要与范围原型申报你的bean,如果是一般的Spring应用程序

<!-- A bean definition with singleton scope --> 
<bean id="..." class="..." scope="prototype"> 
    <!-- collaborators and configuration for this bean go here --> 
</bean> 

或要求,如果它是卷簧应用

<!-- A bean definition with singleton scope --> 
<bean id="..." class="..." scope="request"> 
    <!-- collaborators and configuration for this bean go here --> 
</bean> 

更多示例请看 http://www.tutorialspoint.com/spring/spring_bean_scopes.htm