heart_coder
heart_coder

Reputation: 189

Constructor injection in Spring

I'm working on a code where a class A is constructing an object of class B using parameterized constructor of class B. As of now, class B is not yet spring injected. The requirement is that I should always have a new non-singleton object of class B. The code somewhat looks like this:

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

}

How should my spring-config look like if i have to inject class B using spring?

Upvotes: 2

Views: 251

Answers (2)

Sangeeth
Sangeeth

Reputation: 634

Define the bean as prototype

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

Use applicationContext getBean method to create bean each time by passing arguments.

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

       }

Upvotes: 1

mavarazy
mavarazy

Reputation: 7735

If I understand correctly, you are asking about Spring scopes

Basically, you need to declare your bean with scope prototype if it's a general spring application

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

or request, if it's a web spring application

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

For more examples look at http://www.tutorialspoint.com/spring/spring_bean_scopes.htm

Upvotes: 1

Related Questions