Я хочу создать несколько экземпляров Object2
.Каждый экземпляр должен быть внедрен со своим собственным экземпляром Object1
, следовательно, Object1 имеет прототип области действия.Теперь, что, если я хочу, чтобы Object1 имел область видимости синглтона внутри графа объекта / запуска с Object2?
Я не могу найти какой-либо другой способ создания нового контейнера IoC, внедрения прототипа Oject1 в него и изменения его области действия на singleton внутри secondContext
.Является ли это приемлемым вариантом?
@Bean
Scope("prototype")
Object1 object1(){
return new Object1();
}
@Bean
Scope("prototype")
Object2 object2(Object1 object1){
// 1. create a new IoC container
ApplicationContext secondContext= new ClassPathXmlApplicationContext("Beans.xml");
// 2. add the prototyped object1 to the container and make sure that it's
// singleton scoped inside this container
[some code that adds object1 to the container]
// 3. Object2's entire object graph now uses the same instance of Object1
return (Object2) secondContext.getBean("Object2");
}
В отличие от этого, если бы я не создавал Object2 через отдельный контейнер IoC, то каждый элемент @autowired элемента графа объектов Object2 был бы создан с помощьюдругой / новый экземпляр Object1.