Внедрение конструктора в Spring

Я работаю над кодом, в котором класс A строит объект класса B, используя параметризованный конструктор класса B. На данный момент класс B еще не введен в Spring. Требование состоит в том, что у меня всегда должен быть новый неодноэлементный объект класса 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);
}

}

Как должен выглядеть мой spring-config, если мне нужно ввести класс B с помощью spring?


person heart_coder    schedule 04.11.2014    source источник


Ответы (2)


Определите 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);
             }

       }
person Sangeeth    schedule 04.11.2014
comment
Спасибо за ответ. Не могли бы вы объяснить, что делает новый Object[]{this,f,e}? Вызывает ли он конструктор класса B? - person heart_coder; 04.11.2014
comment
new Object[]{this,f,e} являются аргументами конструктора. Вы можете сослаться на метод getBean (имя строки, Object [] args) javadoc. В ответе указана гиперссылка. - person Sangeeth; 05.11.2014

Если я правильно понимаю, вы спрашиваете о прицелах Spring.

По сути, вам нужно объявить свой компонент с областью действия prototype, если это обычное приложение Spring.

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

или запрос, если это веб-приложение 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

person mavarazy    schedule 04.11.2014