Из-за архитектуры подключаемого модуля я пытаюсь добавить компонент в программную часть моего webapp. У меня есть компонент Spring, созданный с помощью аннотации @Component
, и я реализую интерфейс ApplicationContextAware
.Добавить Бин программно в Spring Web App Context
Моя функция коррекции выглядит следующим образом:
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
// this fails
this.applicationContext = (GenericWebApplicationContext) applicationContext;
}
В принципе, я не могу понять, как добавить компонент к объекту ApplicationContext уделено setApplicationContext. Может ли кто-нибудь сказать мне, как я собираюсь сделать это неправильно?
Ok, это то, что я в конечном итоге с таким решением:
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr)
throws BeansException {
BeanDefinition definition = new RootBeanDefinition(
<My Class>.class);
bdr.registerBeanDefinition("<my id>", definition);
}
спасибо. я думаю, самая сложная часть - знать, что искать. – user146714
Пожалуйста, обратите внимание, что согласно [JavaDoc] (http://static.springsource.org/spring/docs/3.0.x/javadoc-api/index.html?org/springframework/beans/factory/config/BeanPostProcessor.html): 'BeanFactoryPostProcessor может взаимодействовать и изменять определения bean-компонентов, но никогда не bean-экземпляры. Это может привести к преждевременному созданию экземпляра компонента, нарушению контейнера и возникновению непреднамеренных побочных эффектов. Если требуется взаимодействие экземпляра bean, подумайте об использовании BeanPostProcessor вместо этого. ' – dgiffone
Что делать с' BeanDefinitionRegistryPostProcessor'? Предположим, я написал этот класс. Что дальше? Как его активировать? – Dims