как выполнить развертывание bean-компонента во время выполнения и уничтожить контейнер bean-объекта весной в ioc? - PullRequest
0 голосов
/ 22 марта 2012

У меня есть приложение с ClassPathXMLApplicationContext, которое загрузило некоторые бины из весенних XML-файлов.Я хочу добавить бин во время выполнения.Поэтому я создал еще один экземпляр ClassPathXMLApplicationContext, который считывает новые определения bean-компонентов из новых XML-файлов.Теперь у меня есть два appContexts.

Мой вопрос: как мне скопировать бины из нового контекста в старый?нужно ли копировать?я не могу просто объединить эти два контекста?Есть ли API для слияния?

Позже я хочу удалить компонент из среды выполнения.Я также хочу, чтобы загрузчик классов выгрузил класс компонента при удалении компонента.

Как удалить компонент из ApplicationContext, а также выгрузить класс компонента.

Спасибо, С уважением, Vimal

1 Ответ

0 голосов
/ 22 марта 2012

Вам не нужен второй экземпляр ClassPathXMLAplicationContext. Я думаю, что это поможет вам:

ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Module.xml");
Product myProduct = (Product) context.getBean("Batery");
//when you want to change the bean with another
myProduct = (Product) context.getBean("CD-RW");

В файле XML вам нужны два bean-компонента, где «Batery» может инициализироваться с тем, что вы хотите, но «CD-RW» не может быть инициализирован с помощью конструктора. Вот пример с инициализатором сеттера:

<bean id="Batery" class="com.seller.springtest1.Battery">
    <property name="name" value="AAA" />
    <property name="price" value="2.5" />
</bean>

<bean id="CD-RW" class="com.seller.springtest1.Disc">
    <property name="name" value="CD-RW" />
    <property name="price" value="1.5" />
</bean>

У меня нет запроса об удалении (это функция сборщика мусора), если у вас есть особые потребности (когда вы сохранили ссылку на myProduct), вы можете сделать myProduct = null

...