IOC是什么
控制反转,将对象创建交给Spring IOC容器:对象工厂 目的:将耦合度尽量降低,当具体类发生改变的时候,只需要修改配置文件,而不是修改对用代码。 实现关键原理:XML文件(怎么解析的暂时不用管),工厂模式,
工厂模式
将对象创建的过程交由另一个类的getXXX方法来完成,一个简单的例子
class UserService{
execute(){
UserDao ud = UserFactory.getDao();
ud.add();
}
}
class UserDao{
private static int siz;
add(){
siz++;
}
}
class UserFactory{
public static UserDao getDao(){
return new UserDao();
}
}
有什么好处呢? 当UserDao的包路径之类的事物发生了改变,UserService中不需要为此而修改代码
XML文件:耦合的进一步降低
反射机制中,类的加载只需要知道对应对象的类名称与包路径,就能完成类对象的创建,创建过程是Class.forName(String Package.Class)获取Class信息,然后利用对应类的Class对象来获取构造器,然后newInstance()得到实例,这个过程是一个可重复过程,唯一的变量就是对应类的路径以及类名。 虽然工厂模式解除了服务类和工具类的耦合,但是一旦工具类发生了变更,工厂类仍然要修改代码,尤其是出于复用性,工具类可能处于很多个工厂类中,这样一来,当工具类发生变更的时候,工厂类仍然可能出现大面积改动。 因此,人们想尽量解决这两者的直接依赖关系,于是就有了XML配置文件。 人们通过将工具类的信息写入XML配置文件中,然后通过XML解析获取配置文件中所包含的信息,让所有的工厂类可以直接从一份XML文件里面找到对应工具类的信息,这样一来,当工具类有所变动的时候,我们只需要修改XML文件即可,大大降低了耦合度
IOC利用什么来实现这三者的结合
接口:
BeanFactory作为基类(不常用): 加载配置文件的时候不创建对象,比较费时,但是省内存 ApplicationContext接口:加载配置文件的时候直接创建对象,可以在服务器启动的时候完成所有需要对象的创建。
参考资料