一.概念
ioc :inversion of control控制反转,控制反转的意思是,之前我们的思路都是创建对象的时候,由我们自己主动去new对象,而ioc就是将new 对象的任务交给了ioc容器,我们只需要告诉ioc容器我们需要的对象,然后ioc提供给我们
而di dependcy,依赖注入,就是ioc容器创建业务所需要的类并交给我们;
二.原理
https://blog.csdn.net/lisongjia123/article/details/52129340
https://blog.csdn.net/qq_27888773/article/details/77770519
1.创建Ioc配置文件的抽象资源,这个抽象资源包含了BeanDefinition的定义信息
2.创建一个BeanFactory,这里使用了DefaultListableBeanFactory
3.创建一个载入BeanDefinition的读取器,这里使用XmlBeanDefinitionReader来载入XML文件形式的BeanDefinition
4.然后将上面定位好的Resource,通过一个回调配置给BeanFactory
5.从定位好的资源位置读入配置信息,具体的解析过程由XmlBeanDefinitionReader完成
6.完成整个载入和注册Bean定义之后,需要的Ioc容器就初步建立起来了
最终封装成,BeanDefinition,并且放在BeanFacatory中,有map来管理;
实例化的过程,也就依赖注入是spring底层通过getbean为入口,底层Spring当中提供了两种实例化方案: BeanUtils 和 Cglib 方式。BeanUtils实现机制是通过Java的反射机制,Cglib是一个第三方类库采用的是一种字节码加强方式机制。 Spring中采用的默认实例化策略是Cglib。
另外,实例化之后,依赖注入,利用的setPropertyValue()方法;