我正在尝试创建用于将某些值注册到Map的BeanPostProcessor

如果通过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"/>


我在这里做错了什么?

最佳答案

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

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


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

08-28 06:15