Конструктор инъекций весной
Я работаю над кодом, в котором класс 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);
}
}
Как должна выглядеть моя конфигурация Spring, если мне нужно ввести класс B с помощью Spring?
2 ответа
Определите боб как прототип
<!-- 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);
}
}
Если я правильно понимаю, вы спрашиваете о масштабах Spring
По сути, вам нужно объявить ваш бин с помощью прототипа scope, если это обычное весеннее приложение
<!-- 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