#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:
ДА. В документации говорится, что метод автоматически подключает компонент, и ничего больше.
На фабрике есть другие методы, которые заботятся об инициализации, но для них требуется определение компонента.