构造方法先调用父类的构造方法,再调用子类的构造方法
spring的扩展点
1.实现BeanPostProcessor插手实例化,外加实现PriorityOrdered可以让多个实现BeanPostProcessor排序执行,spring自己实现的实现BeanPostProcessor将会是自己set进去
2.实现BeanFactoryPostProcessor
区别
BeanPostProcessor:bean级别的处理,针对某个具体的bean进行处理,默认是会对整个Spring容器中所有的bean进行处理,方法中有两个参数。类型分别为Object和String,第一个参数是每个bean的实例,第二个参数是每个bean的name或者id属性的值。所以我们可以第二个参数,来确认我们将要处理的具体的bean
BeanFactoryPostProcessor:BeanFactory级别的处理,是针对整个Bean的工厂进行处理
当我们调用BeanFactoryPostProcess方法时,这时候bean还没有实例化,此时bean刚被解析成BeanDefinition对象。
Spring容器初始化bean大致过程 定义bean标签>将bean标签解析成BeanDefinition>调用构造方法实例化(IOC)>属性值得依赖注入(DI)
参考
https://www.cnblogs.com/dreampig/p/9036077.htm
还有BeanFactoryPostProcess的子类也算是扩展点
番外:
在spring中有很多以Aware
结尾的接口.如果一个Bean实现了该接口,那么当该Bean被spring初始化时,spring会向该Bean注入相关资源(就是会回调接口中的方法).,实现了ApplicationContextAware接口的bean,当spring容器初始化的时候,会自动的将ApplicationContext注入进来l
ApplicationContextAware解决单例中注入了一个原型对象使用@Lookup或实现该接口