1.什么是IOC:
控制反转:指将对象的控制权转移给Spring框架,由 Spring 来负责控制对象的生命周期(比如创建、销毁)和对象间的依赖关系。
(就是创建对象的控制权,被反转到了Spring框架上。)
1.IoC的主要实现方式:依赖注入DI
2.IoC容器:具有依赖注入功能的容器,可以创建对象的容器。IoC容器负责实例化、定位、配置应用程序中的对象并建立这些对象之间的依赖。
最直观的表达就是:
以前创建对象的时机和主动权都是由自己把控的,如果在一个对象中使用另外的对象,就必须主动通过new指令去创建依赖对象,使用完后还需要销毁(比如Connection等),对象始终会和其他接口或类耦合起来。
而 IOC 则是由专门的容器来帮忙创建对象,将所有的类都在 Spring 容器中登记,当需要某个对象时,不再需要自己主动去 new 了,只需告诉 Spring 容器,然后 Spring 就会在系统运行到适当的时机,把你想要的对象主动给你
2.什么是DI
IoC 的一个重点就是在程序运行时,动态的向某个对象提供它所需要的其他对象,这一点是通过DI来实现的;
即应用程序在运行时依赖 IoC 容器来动态注入对象所需要的外部依赖。
而 Spring 的 DI 具体就是通过反射实现注入的,反射允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性
3.IoC的原理:
IoC 的实现原理就是工厂模式加反射机制
第一步:xml配置文件,配置创建的对象
<bean id="dao" class="com.zsh.UserDao"></bean>
第二步:有service类和dao类,创建工厂类
class UserFactory{
public static UserDao getDao(){
//1.xml解析
String classValue = class属性值;
//2.通过反射创建对象
Class clazz = Class.forName(classValue);
return (UserDao)clazz.getDeclaredConstructor().newInstance();
}
}