Как вручную связать фасоль с Spring?
У меня есть боб B
который я должен создать сам (используя new B()
) и который имеет @Autowire
а также @PostConstruct
аннотаций.
Как заставить Spring обрабатывать эти аннотации из моего бина A
?
Связанный вопрос:
2 ответа
Аарон, я верю, что твой код правильный, но я использовал следующее:
B bean = new B();
AutowireCapableBeanFactory factory = applicationContext.getAutowireCapableBeanFactory();
factory.autowireBean( bean );
factory.initializeBean( bean, "bean" );
Первый метод обработает @Autowire
поля и методы (но не классические свойства). Второй метод вызовет постобработку (@PostConstruct
и любой определенный BeanPostProcessor
с).
Контекст приложения может быть получен в бине, если он реализует ApplicationContextAware
интерфейс.
Другой вариант - позволить контейнеру Spring автоматически создавать новый компонент (вместо того, чтобы создавать новый экземпляр самостоятельно с помощью нового ключевого слова). Внутри класса, которому необходимо программно создать новый экземпляр, внедрите экземпляр AutowireCapableBeanFactory :
@Autowired
private AutowireCapableBeanFactory beanFactory;
Затем:
B yourBean = beanFactory.createBean(B.class);
Контейнер будет вводить экземпляры, аннотированные аннотациями @Autowired, как обычно.