Есть ли способ программно добавить beanPostProcessor в ClassPathXmlApplicationContext?Как я могу программно добавить beanPostProcessor в ClassPathXmlApplicationContext?
Я могу сделать это декларативно в xml, но, видимо, нет возможности добавить программно.
Мой процессор должен что-то делать, если мой боб является MyInterfaceAware, а затем setMyInterface (...).
Мне нужно сделать это в коде, потому что реализация MyInterface создается в коде, она недоступна при запуске XML.
Я использую Spring 3.1.2.RELEASE.
Спасибо,
... это то, что я делаю ...
public void setSpringBeanFactory(BeanFactory beanFactory) {
this.beanFactory = (ApplicationContext) beanFactory;
((ClassPathXmlApplicationContext) beanFactory).getBeanFactory().addBeanPostProcessor(new BeanPostProcessor() {
public Object postProcessBeforeInitialization(Object bean,
String beanName) throws BeansException {
return bean;
}
public Object postProcessAfterInitialization(Object bean,
String beanName) throws BeansException {
if (bean instanceof RegistryAware)
((RegistryAware) bean).setRegistry(ApplicationContextRegistryImpl.this);
return bean;
}
});
((ClassPathXmlApplicationContext)beanFactory).refresh();
}
Простой способ? Не работает! –
Процессоры не вызываются. –
Добавьте beanPostProcessor после обновления(). Внутренний BF воссоздается на каждом обновлении(). Если вам нужен BPP раньше, переопределите postProcessBeanFactory(), чтобы зарегистрировать его. (не забудьте позвонить супер) –