3

我正在尝试创建一个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;
  }
}

豆配置

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

我在这里做错了什么?

4

2 回答 2

5

在春季论坛提出另一个问题后,我得到了解决方案。

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

于 2012-12-31T03:20:23.407 回答
4

我认为这样做的方法是用以下方式注释BeanPostProcessorComponent

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

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

于 2012-12-24T19:06:47.173 回答