【问题标题】:BeanPostProcessor with @Bean annotation not working带有 @Bean 注释的 BeanPostProcessor 不起作用
【发布时间】:2012-12-24 09:20:04
【问题描述】:

我正在尝试创建一个 BeanPostProcessor 来将一些值注册到 Map。

如果我通过 xml 定义创建 bean 实例,BeanPostProcessor 工作正常,但如果我将 bean 定义更改为 @Configuration,则它不起作用。

后处理器

public class InstantiationTracingBeanPostProcessor implements BeanPostProcessor {

  public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
      return bean;
  }

  public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
      System.out.println("Bean '" + beanName );
      return bean;
  }
}

Bean 配置

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;

@org.springframework.context.annotation.Configuration
public class Configuration {
    @Bean
    public @Qualifier("InstantiationTracingBeanPostProcessor")
    InstantiationTracingBeanPostProcessor activitiConfigurationBeanPostProcessor() {
        return new InstantiationTracingBeanPostProcessor();
    }
}

组件扫描配置

<context:component-scan base-package="xyz.config"/>
<context:annotation-config/>

如果我使用上述配置,应用程序就会挂起。但是,如果我使用下面给出的基于 xml 的配置,它就可以正常工作。

<bean class="xyz.bean.InstantiationTracingBeanPostProcessor"/>

我在这里做错了什么?

【问题讨论】:

  • 我可以看看你的主要方法吗?
  • @harish.raj 这是一个网络应用程序
  • 您使用哪个 Spring 版本?
  • 能否请您显示您在配置类中加载 bean 定义的配置
  • @BijuKunjummen 配置类在组件扫描路径中

标签: spring spring-ioc


【解决方案1】:

spring forum 提出另一个问题后,我得到了解决方案。

bean 工厂方法应定义为static method 以使其工作。

【讨论】:

    【解决方案2】:

    我认为这样做的方法是用 Component 注释您的 BeanPostProcessor

    @Component
    public class InstantiationTracingBeanPostProcessor implements BeanPostProcessor {
        //...
    }
    

    Spring 在组件扫描期间会自动处理(因此无需在配置中添加@Bean-annotated 方法)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 2017-08-08
      • 2020-10-14
      • 1970-01-01
      相关资源
      最近更新 更多