В обьявлении этих бинов нет ничего сложного:
Но проблема появляется, когда нужна зависимость SingletonBean от PrototypeBean. В этом случае можно поступить несколькими способами:
ApplicationContextAware или BeanNameAware method injection; Lookup method injection; Arbitrary method replacement.
Расскажу о самом простом (по крайней мере для меня) из них - аналоге BeanNameAware.
PrototypeBean может представлять из себя что угодно. В данном контексте нам это не важно, так что будем рассматривать его просто как POJO класс:
public class PrototypeBean {
...
}
а в SingletonBean используем фабрику org.springframework.beans.factory.ObjectFactory:
public class SingletonBean {
private ObjectFactory factory;
public void createPrototypeBean() {
//здесь можем получить сколько угодно экземпляров PrototypeBean
PrototypeBean bean = factory.getObject();
}
...
public void setFactory(ObjectFactory beanFactory) throws BeansException {
this.factory = beanFactory;
}
}
Чтобы явно указать ObjectFactory экземпляр какого бина создавать, в конфигурации пропишем ObjectFactory как property Singleton-бина:
Комментариев нет:
Отправить комментарий