Как вручную связать фасоль с 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, как обычно.

Другие вопросы по тегам