【问题标题】:BeanPostProcessor not called for @Bean methods with Spring Java Config使用 Spring Java Config 不为 @Bean 方法调用 BeanPostProcessor
【发布时间】:2014-07-17 16:58:11
【问题描述】:

我正在尝试在我的 Spring Java Config 中添加一个 BeanPostProcessor。它似乎对通过组件扫描(@Configuration、@RestController、..)创建的 bean 起作用但仅

我在 Java 配置中创建的 Bean 不是。

例如

@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 从不处理它。

【问题讨论】:

    标签: java spring spring-boot spring-java-config


    【解决方案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);
        }
    }
    

    【讨论】:

    • 如果你在postProcessAfterInitialization中添加你的println?
    • 它对我不起作用,因为 BeanPostProcessor 有一个自动装配的 bean,它也是后处理器的目标。根据文档,这是行不通的。我必须打破那种我必须让它发挥作用的循环依赖。
    • 对于“文档”,我的意思是 docs.spring.io/spring/docs/4.0.0.RELEASE/… 更具体地说是名为“BeanPostProcessors 和 AOP 自动代理”的注释
    • @WimDeblauwe 伙计,我遇到了同样的问题,我认为如果 bean.equals(referencedAutowiredBean) 和 BeanPostProcessor 不起作用,我可以使用,一旦我删除了引用的AutowiredBean 并在 beanName.equals(nameOfTheBean) 开始工作时使用它!
    • 我也发现了INFO BeanPostProcessorChecker Bean is not eligible for getting processed by all BeanPostProcessors
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2018-08-14
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多