AutowireCapableBeanFactory.autowireBean(bean)从不调用InitlizingBean.afterPropertiesSet()?

时间:2011-04-10 08:48:39

标签: java spring

我需要在设置bean属性后进行一些初始化工作,

ApplicationContext context = new ...;
AutowireCapableBeanFactory factory = context.getAutowireCapableBeanFactory();

// autowireBean only populate the fields, but never invoke afterPropertiesSet().
factory.autowireBean(bean);

// Should I set it manually?
// if (bean instanceof InitializingBean) {
//    ((InitializingBean) bean).afterPropertiesSet();
// }
// if (bean instanceof ApplicationContextAware) {
//    ((ApplicationContextAware) bean).setApplicationContext(context); 
// }
// if ...

2 个答案:

答案 0 :(得分:8)

试试这个:

factory.autowireBean(bean);
bean = (YourBean) factory.initializeBean(bean, "anyName");

它适用于@PostConstruct(我建议),所以它也应该执行afterPropertiesSet()anyName是bean名称,可能在涉及BeanNameAware接口时使用。

答案 1 :(得分:1)

是。文档说该方法自动装配bean,没有别的。

工厂中还有其他方法负责初始化,但它们需要bean定义。