Spring中的构造函数注入

时间:2014-11-04 00:36:40

标签: spring constructor-injection

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

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);
}

}

如果我必须使用弹簧注射B级,我的spring-config应该怎么样?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你会问到Spring范围

基本上,如果它是一个普通的spring应用程序,你需要声明你的bean的范围是 prototype

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

或请求,如果它是一个Web spring应用程序

<!-- 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

答案 1 :(得分:1)

将bean定义为原型

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

每次使用applicationContext getBean方法通过传递参数来创建bean。

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);
             }

       }