2012-07-15 1 views
0

Я использую Spring3.1 (автономный ENV)Как утилизировать/чистый MessageListener боб programmaticly

Я создал MDB с помощью орудий MessageListener, которые соединяли к теме с помощью шаблонов.

этот bean scope одиночныйton.

Иногда я хочу избавиться от этого компонента. когда я говорю, отчуждать я имею в виду, я хочу МОК, чтобы освободить этот ресурс и очистить этот компонент из контейнера. (который в конечном счете сделает этот компонент остановить прослушивание сообщений и свободную Неиспользуемой памяти.)

  1. мне нужно получить этот компонент по его id с помощью метода getBean (..) для его выполнения. Я слышал, что использование getBean (..) может вызвать утечку памяти. как мне это сделать иначе?

  2. Должен ли я использовать Singleton Scope или прототип один для этой цели?

спасибо, луч.

ответ

0

Я не уверен, что вы имеете в виду getBean() и утечек памяти, но ...

Если вы хотите, чтобы удалить его полностью, а не просто остановить его, вы можете объявить его в своем собственном «ребенок» контекст приложения. Сделать основной контекст родителем, чтобы он мог ссылаться на beans в основном контексте (при необходимости).

/** 
* Create a new ClassPathXmlApplicationContext with the given parent, 
* loading the definitions from the given XML files and automatically 
* refreshing the context. 
* @param configLocations array of resource locations 
* @param parent the parent context 
* @throws BeansException if context creation failed 
*/ 
public ClassPathXmlApplicationContext(String[] configLocations, ApplicationContext parent) throws BeansException { 
    this(configLocations, true, parent); 
} 

Если вы хотите его удалить; вызовите context.destroy().

+0

Так что, если мне нужно 50 млн. Фунтов стерлингов, нужно создать 50 контекстов? не имеет смысла. – rayman

+0

Мне просто нравится делать это таким образом; держит вещи чистыми; используя дочерние контексты, позволяет настраивать компоненты с использованием заполнителей свойств и настраивать среду контекста (в 3.1). Если вы не хотите этого делать, вы можете использовать AbstractBeanFactory factory = (AbstractBeanFactory) ctx.getBeanFactory(); \t \t factory.destroySingleton ("dmlc"); –

+0

Что можно сказать о протеканиях/утечке памяти, если я использую этот путь (метод AbstractBeanFactory) – rayman