图不能少
InstantiationAwareBeanPostProcessor的postProcessAfterInstantiation
在实例化之后,populateBean
开始的时候,做一些处理,如果说是返回false的话,就会停止populateBean
,直接返回了,也就是说你可以控制是否需要继续注入处理。
扩展实战
我们来个处理器,不让他们注入数据。
MyConfig
里面定义了一个要注入的NoPopulateBean
。
@Configuration
@ComponentScan(value = {"com.ww.pojo","com.ww.postprocessors"})
public class MyConfig {
@Autowired
private NoPopulateBean noPopulateBean;
@Autowired
public void setMyTestBean(NoPopulateBean noPopulateBean) {
System.out.println(noPopulateBean);
}
}
NoPopulateBean
@Component
public class NoPopulateBean {
}
测试代码
@Test
public void postProcessAfterInstantiationTest() throws Exception {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
applicationContext.register(MyConfig.class);
applicationContext.refresh();
MyConfig bean = applicationContext.getBean(MyConfig.class);
System.out.println(bean);
}
先看看一般的结果,有注入了:
MyInstantiationAwareBeanPostProcessor
啥都没干,就实现postProcessAfterInstantiation方法
@Component
public class MyInstantiationAwareBeanPostProcessor implements InstantiationAwareBeanPostProcessor
{
@Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return false;
}
结果没有注入,注入方法也没有执行:
这个扩展点有什么用呢,除了你可以让指定的bean
不注入以外,当然也可以反过来,去操作bean
呀,都传给你拉。
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。