Spring学习:IOC之降低耦合的原因

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接口:加载配置文件的时候直接创建对象,可以在服务器启动的时候完成所有需要对象的创建。

参考资料

  • 尚学堂Spring5框架2020最新版

你可能感兴趣的:(JVM相关,JAVA基础知识)