目录
1.什么是IOC
IOC即为控制反转,把对象的创建和对象之间的调用过程,交给Spring管理。不需要像se阶段一样new对象。
使用IOC的目的:为了降低耦合度。所谓耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计及编码质量评价的一个标准。
2.IOC的底层原理
假如有以上俩个类,传统创建对象我们需要在UesrService类中调用uesrDao中add方法需要先在UesrService中new uesrDao的对象,再调用方法。
传统创建对象致命问题:耦合度高,关联过于紧密,牵一发动全身。
为了降低耦合度,解决方案如下文。
建一个工厂类
通过工厂的设计模式,在UserFactory中返回创建的对象,对象在工厂中得到。这个过程只是降低了UserService和UserDao的耦合度,没有降低到最大限度。此时需要ioc。
3.IOC过程
1.配置xml文件,配置要创建的对象
<bean id="名字" class="路径"></bean>
2.假如有上service类和dao类,创建工厂类
class UserFactory {
public static UserDao getDao() {
String classValue=class属性值; //通过xml解析得到class的值
//通过反射得到对象
Calss clazz=class.forName(classValue);
return (UserDao)clazz.newInstance(); //调用newInstance方法此时返回的也是UserDao对象
}
}
此时只要修改xml的配置文件,就可以通过工厂返回对象。耦合度进一步降低。
用Spring框架就是简化代码,把耦合度降低。
4.IOC总结
1.IOC本质是个容器,本质上是对象工厂,通过读取配置文件,再通过它用反射来完成。
2.Spring提供的IOC容器的俩种实现方式(俩个接口):
public class Spring5Test {
@Test
public void test(){
//加载spring配置文件,ApplicationContext 在加载配置文件时就会创建对象,BeanFactory在下面获取创建对象的时候才会创建对象
ApplicationContext context =new ClassPathXmlApplicationContext("bean1.xml");
//获取配置创建的对象,BeanFactory在此时才会创建对象
User user=context.getBean("user",User.class);
user.add();
}
}
1.BeanFactory:IOC容器基本实现方式,Spring内部使用接口,一般不提供开发人员使用。
特点:加载配置文件,不会去创建对象。在获取或使用对象时才创建对象。
2.ApplicationContext:可以理解成BeanFactory子接口,比BeanFactory更加强大。面向开发人员。
特点:加载配置文件,就会去创建对象。一般使用第二种。
3.ApplicationContext实现类