2014-11-04 153 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