我正在尝试创建一个BeanPostProcessor用于将一些值注册到 Map 的。
的BeanPostProcessor,如果我通过创建XML定义bean实例工作正常,但如果我的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;
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
组件扫描配置
<context:component-scan base-package="xyz.config"/>
<context:annotation-config/>
Run Code Online (Sandbox Code Playgroud)
如果我使用上述配置,应用程序就会挂起。但是,如果我使用下面给出的基于 xml 的配置,它就可以正常工作。
<bean class="xyz.bean.InstantiationTracingBeanPostProcessor"/>
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
我认为做到这一点的方法是用以下BeanPostProcessor注释Component:
@Component
public class InstantiationTracingBeanPostProcessor implements BeanPostProcessor {
//...
}
Run Code Online (Sandbox Code Playgroud)
这将在组件扫描期间由 Spring 自动处理(因此无需@Bean在配置中添加带注释的方法)。
| 归档时间: |
|
| 查看次数: |
9299 次 |
| 最近记录: |