AutowireCapableBeanFactory.autowireBean (компонент) никогда не вызывает InitlizingBean.afterPropertiesSet()?

#java #spring

#java #spring

Вопрос:

Мне нужно выполнить некоторую работу по инициализации после установки свойств компонента,

 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 ...
  

Ответ №1:

Попробуйте это:

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

Он работает с @PostConstruct (что я бы рекомендовал), поэтому он также должен выполняться afterPropertiesSet() . anyName это имя компонента, вероятно, используемое, когда задействован BeanNameAware интерфейс.

Ответ №2:

ДА. В документации говорится, что метод автоматически подключает компонент, и ничего больше.

На фабрике есть другие методы, которые заботятся об инициализации, но для них требуется определение компонента.