1、Spring源码概述图:
2、一些重要的接口
3、Spring获取对象的过程
BeanDefinition中实现的方法,把xml中定义的对象封装为一个对象,方便后面处理
4、BeandefinitionReader
BeandefinitionReader作为一个抽象层来处理配置文件,定义规范,方面扩展,如果再有其他格式的配置文件的话,直接实现该接口即可。
5、BeanFactory接口
BeanFactory是访问Spring Bean的根接口
BeanFactory
Bean工厂,整个容器的根接口,也是容器的入口
Construct ctor = clazz.getConstructor();
Object obj = ctor.newInstance()
这几个接口要特别注意
6、 BeanFactoryPostProcessor登场
在容器创建过程中需要动态的改变bean的信息怎么办?
例如:<property name = url value = ${jdbc.url}
如果想要随时修改beanDeifinition怎么办?
答案:用 BeanFactoryPostProcessor
例如PlaceholderConfigurerSupport类如下:
自己实现BeanFactoryPostProcessor方法如下:
把beanDefinition信息修改完之后,就可以用反射进行实例化操作了。创建对象分为实例化和初始化。如下:
7、 设置Aware接口属性
Aware接口是什么作用?
当Spring容器创建的bean对象在进行具体操作的时候,如果需要容器中的其他对象,此时可以将对象实现Aware接口,来满足需要
8、 BeanPostProcessor:before、BeanPostProcessor:after 后置增强处理器
9、 对象的分类
对象分为两类:一类是普通对象,一类是容器对象
Spring需要的对象举例:
Bean 工厂实现应尽可能支持标准 Bean 生命周期接口。全套初始化方法及其标准顺序为:
在不同的阶段要处理不同的工作,应该怎么办?
观察者模式:监听器,监听事件,多播器(广播器)
10、 BeanFactory 和FactoryBean的区别
都是用来创建对象的;
当使用BeanFactory的时候必须要遵循完整的创建过程,这个过程是由Spring来管理控制的;
而使用FactoryBean只需要调用getObject就可以返回具体的对象,整个对象的创建过程是由用户自己来控制的,更加灵活。