IOC容器底层原理
什么是IOC
控制反转,把创建对象和对象之间的调用过程,交给Spring进行统一管理
目的是为了使得程序的耦合度降低(统一管理)
演变过程
普通方式–>工厂模式实现–>IOC过程
原始方式

缺点:耦合度过高,如果我在service中使用到了Dao的对象,一旦Dao包的位置发生变化,就要全部都改变。
工厂模式
创建一个工厂专门用来生成对象,就不需要担心其位置会发生变化,只需要改变工厂中的import即可,但仍然存在这个缺点,只是修改的量减小了。

IOC方式
通过修改,将修改限定在xml配置文件内部,xxxFactory类,与使用这个对象的类中的代码都无需修改。

IOC容器使用的技术
xml解析、工厂模式、反射
实现过程
在xml配置文件中作相应的配置(类的全类名,读取时的id)
在xxxFactory中首先通过Dom4j等相应的xml解析依赖,对xml配置文件进行解析,然后读取其中与对象创建有关的bean标签,其中的id为创建的对象的key,然后创建对象,将其作为value调用put方法写入即可(采用Map实现)
class xxxFactory{
public static void getXXX(){
String classValue = class属性值; //通过xml解析出来
String id = id属性值;
Class clazz = Class.forName(classValue);
map.put(id,(XXX类型)clazz.newInstance);
return;
}
}
优点:
如果类途径发生了变化,只需要在配置文件中改就可以了,不需要改动代码的内容。
getBean方法的本质就是通过id获取value值的一种操作,值得内容通过泛型来转换。