IOC
BeanFactory
ClassPathXmlApplicationContext
AbstractApplicationContext 通过调 refrech()方法 去实现ioc容器的初始化, 然后执行三个步骤
1、定位 主要执行 getResouce()方法 主要就是通过扫描路径去扫描配置文件
2、载入 主要是通过reader.loaderBeanDefinition()方法进行加载配置文件
3、注册 主要通过reqisterDefinition()方法将加载的配置文件注册到一个“配置文件信息”中 也就是一个map<String,BeanDefinition>
其实这个map就可以理解为是ioc容器。
DI
BeanFactory
实例化:
AbctractBeanFactory 通过getBean()方法去进行实例化bean,如果没有这个bean就 createbean()去实例化一个bean,通过CreateBeanInstan()去实例化这个bean,通过BeanWarpper()(原始对象,代理对象以及保证了所有对象的关系),最后存储到一个map中类型是 Warpper对象,map<String,warpper>
注入:
初始化之后就开始注入,WarpperImpl通过setValue()方法,通过map中的对象在通过invork()反射方法进行赋值,然后搜集到需要注入的bean,最后存入到BeanFactory工厂中。
AOP
getProxy 保存到 beanWarpper对象中,在bean初始化时候有一个 是否是代理对象策略,如果是代理对象就通过 AOP JDK/CGlib去获取代理对象方法来获取bean,然后在走适配器来执行 前置(after)和后置(befor)