pring源码之InstantiationAwareBeanPostProcessor
BeanPostProcessor
的子接口,添加了实例化之前(before-instantiation)的回调,和实例化之后(after instantiation)的回调,但是这些操作发生在显示的设置属性或者自动注入之前发生。一般用来阻止具体的目标bean默认实例化,例如给目标bean创建代理对象(如惰性实例化),或者是用来给属性增加额外注入策略
这个接口一般是给框架本身用的,推荐尽可能实现BeanPostProcessor
或者是继承InstantiationAwareBeanPostProcessorAdapter
接口
InstantiationAwareBeanPostProcessor 源码
public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {
Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException;
boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException;
PropertyValues postProcessPropertyValues(
PropertyValues pvs, PropertyDescriptor[] pds, Object bean,
String beanName) throws BeansException;
}
postProcessBeforeInstantiation方法
这个方法在bean实例化之前被调用,返回的对象可能是代替了目标对象的代理对象,有效的阻止了目标bean默认的实例化。也就是说,如果该方法返回的是non-null
对象 ,这个bean的创建过程就会被短路,就不会执行postProcessAfterInitialization
的方法和postProcessPropertyValues
方法; 相反的如果方法返回值为null,则会继续默认的bean的实例化过程。
在AbstractAutowireCapableBeanFactory
类的方法createBean