Bean的注册
Bean的注册方式主要有两种:配置文件和注解,这两种方式的本质都是提供Bean的基本信息,最终实现BeanDefinition接口通过反射来创建Bean实例,这两种方式分别通过解析字符串和创建docment对象来提供Bean的基本信息。
xml文件中的${}占位符时通过BeanFactoryProcessor的实现子类PlaceHolderConfigurationSupport来解析的,BeanDefinition是不解析的。
如何理解容器
BeanFactory是容器的顶级接口,我们通常用到的对象是DefaultListableBeanFactory。
Bean的生命周期
-
实例化
-
属性赋值
a.用户自定义属性赋值(比如说什么name、age)
b.通过AWare接口(标记接口)的实现子类来对容器对象进行赋值 -
拓展实现
a.执行前置处理方法
b.执行初始化方法(invokeInitMethods)
c.执行后置处理方法 -
使用对象
-
销毁对象
invokeInitMethods
首先判断是否实现了InitializingBean接口,如果实现就调用bean的afterPropertiesSet方法,给用户干预Bean创建留出来一个接口。如果没有就直接执行invokeInitMethods。
AOP是IOC的扩展实现:AOP主要是通过动态代理来实现的,具体方法有jdk和cjlib。在执行完第二步属性赋值之后,我们得到了一个bean对象,通过传入BeanPostProcessor的子接口生成代理对象实现AOP。