spring – 带有@Bean注释的BeanPostProcessor不起作用
作者:互联网
我正在尝试创建一个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"/>
我在这做错了什么?
解决方法:
我认为这样做的方法是用Component注释你的BeanPostProcessor:
@Component
public class InstantiationTracingBeanPostProcessor implements BeanPostProcessor {
//...
}
Spring会在组件扫描期间自动处理(因此无需在配置中添加@ Bean注释方法).
标签:spring,spring-ioc 来源: https://codeday.me/bug/20190826/1724728.html