IOC(概念和原理)
控制反转,是面向对象编程的一种设计原则,可以用来降低计算机代码之间的耦合度。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给他。也可以说依赖被注入到对象中。
通俗的讲,就是把对象创建和对象之间的调用过程,都交给 spring 进行管理,这个过程叫做IOC
使用IOC目的:降低耦合度
IOC底层原理
xml解析、工厂模式、反射
演变过程
原始方式:
耦合度太高
工厂模式:
通过工厂模式降低了UserService和UserDao之间的耦合度,但仍然没有降到最低
IOC:
第一步,配置xml文件,配置创建的对象
<bean id="dao" class="com.dao.UserDao"></bean>
第二步,有service类和dao类,创建工厂类,进一步降低耦合度,修改UserDao路径只需要改xm配置文件
class UserFactory{
public static UserDao getDao(){
String classValue=class属性值 //xml解析
Class clazz=Class.forName(classValue) //通过反射创建对象
return (UserDao)clazz.newInstance;
}
}
IOC(接口)
IOC思想基于IOC容器来完成,IOC容器底层就是对象工厂
Spring提供IOC容器实现两种方式:(两个接口)
//加载spring配置文件
BeanFactory context = new ClassPathXmlApplicationContext("bean.xml");
//获取配置创建的对象
User user=context.getBean("user",User.class);
BeanFactory
IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用
加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
ApplicationContext
BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用。
加载配置文件时候就会把配置文件对象进行创建
哪一种更好
第一种用的时候才创建,节约了资源
但是为了提升运行速度,我们将这种耗时耗资源的操作在服务启动时就应该把他完成
ApplicationContext中的实现类
第一种是要写文件在盘中的路径,比如C盘xx文件夹
第二种是类路径