con*_*ind 5 java spring spring-mvc
我现在是春天的新人.我试图遵循调用PostConstruct和BeanPostProcessor的顺序.
据我所知,下面是订单: -
但是我看到以下顺序: -
SpringConfig文件foo.xml删除了bean标记上下文:component-scan base-package ="springtest"
@Component
public class MySpring implements ApplicationContextAware,BeanPostProcessor{
public static int temp =0;
public MySpring(){
System.out.println("Initializing MySpring Constructor");
}
@PostConstruct
public void temp(){
System.out.println("PostConsturct" + this.getClass());
temp++;
}
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("Before BPP " + bean.getClass());
return this;
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("After BPP " + bean.getClass());
return this;
}
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("Initializing ApplicationContext");
}}
Run Code Online (Sandbox Code Playgroud)
响应
MySpring.temp值为3表示PostContruct是calles 3次.
有人可以帮助我以上......
它被调用了 3 次,因为你用你的MySpringbean替换了每个bean。
你的方法
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("Before BPP " + bean.getClass());
return this;
}
Run Code Online (Sandbox Code Playgroud)
正在返回this,有效地表示您当前正在后处理的 bean 对象应该被MySpring对象替换。您可以通过尝试从您的ApplicationContext.
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigurationBean.class);
ctx.getBean(ConfigurationBean.class);
Run Code Online (Sandbox Code Playgroud)
这将失败并显示NoSuchBeanDefinitionException.
您的后处理方法应该返回其bean参数的值。
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("Before BPP " + bean.getClass());
return bean;
}
Run Code Online (Sandbox Code Playgroud)
@PostConstruct调用是用它自己的BeanPostProcessor, 实现的CommonAnnotationBeanPostProcessor。已注册的BeanPostProcessor实例按顺序使用。
当您ApplicationContext初始化您的MySpring实例时,CommonAnnotationBeanPostProcessor它已经初始化并因此处理您的 bean。之后MySpring完全初始化的时候,检测到它是一个BeanPostProcessor和寄存器它。它在此之前注册CommonAnnotationBeanPostProcessor(BeanPostProcessor实例有优先级设置)。
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |