BeanPostProcessor не вызывается для методов @Bean с Spring Java Config

Я пытаюсь добавить BeanPostProcessor в свою конфигурацию Java Spring. Кажется, он работает, но только для bean-компонентов, созданных с помощью сканирования компонентов (@Configuration, @RestController, ..)

Компоненты, которые я создаю в своей конфигурации Java, не являются таковыми.

E.g.

@Configuration
public class MyConfiguration
{
  @Bean
  public MyBean myBean()
  {
    return new MyBean();
  }


  @Bean
  public static MyBPP myBeanPostProcessor()
  {
    return new MyBPP();
  }
}

Обратите внимание, что я объявил метод BeanPostProcessor статическим (см. http://forum.spring.io/forum/spring-projects/container/123899-beanpostprocessor-with-bean-annotation-not-working).

Таким образом, создается экземпляр MyBean, но BeanPostProcessor никогда его не обрабатывает.


person Wim Deblauwe    schedule 28.05.2014    source источник


Ответы (1)


попробуй мой тест, мне помогло

class MyBPP implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        System.out.println(bean);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        return bean;
    }
}

@Configuration
public class MyConfiguration {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }

    @Bean
    public MyBPP myBeanPostProcessor() {
        return new MyBPP();
    }

    public static void main(String[] args) {
        new AnnotationConfigApplicationContext(MyConfiguration.class);
    }
}
person Evgeniy Dorofeev    schedule 28.05.2014
comment
А если вы добавите свой println в postProcessAfterInitialization ? - person Wim Deblauwe; 28.05.2014
comment
У меня это не сработало, потому что BeanPostProcessor имел bean-компонент, который также был целью постпроцессора. Согласно документам, это не может работать. Мне пришлось сломать круговую зависимость, чтобы заставить ее работать. - person Wim Deblauwe; 28.05.2014
comment
Под «документами» я имею в виду docs.spring.io/spring/docs/4.0.0.RELEASE/, в частности, примечание под названием BeanPostProcessors и автоматическое проксирование AOP - person Wim Deblauwe; 30.05.2014