带有@Bean注释的BeanPostProcessor不起作用

时间:2012-12-24 09:20:04

标签: spring spring-ioc

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

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

PostProcessor中

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"/>

我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

我认为这样做的方法是使用BeanPostProcessorComponent添加注释:

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

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

答案 1 :(得分:3)

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

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