Spring源码知识
bean的生命周期:
- 实例化:在堆空间中申请内存,使用反射来实现;(createBeanInstance)
- 自定义属性赋值(setter)、容器对象属性赋值(invokeAwareMethods)
- 前置处理方法
- 调用初始化方法(invokeInitMethods)
- 后置处理方法(AOP)
- 对象进行使用
- 对象进行销毁(必须关闭容器)
AOP是通过动态代理实现的,有jdk和cglib两种方式;
AOP与IOC的关系:AOP是整个IOC执行流程中的一个扩展点;
PostProcessor(后置处理器、增强器),对BeanFactoryPostProcessor和BeanPostProcessor进行扩展和增强;
接口和抽象类的区别:
- 接口:自上而下,接口制定约束和规范来约束子类;
- 抽象类:自下而上,抽象类是从子类中共有的特性归纳出来的;
xml和注解等配置文件首先通过接口中的约束和规范解析成BeanDefinition并注入到容器中,BeanDefinition通过反射进行实例化对象(进入bean的生命周期);
外部类可以通过BeanFactory根接口访问容器;