IOC:是指控制反转,是一种设计理念,IOC不是某一种具体技术的实现,IOC是一种设计理念!IOC是一种设计理念!IOC是一种设计理念!他要求由第三方来对对象进行控制和创建。
1, IDAO dao = new UserDAO()
使用接口对类进行抽象,如果当前工程由1000个类需要Dao,那么就需要写1000行这样的代码,但是如果某天不再使用UserDao,而是要使用新的User类,我们就需要去找到这些代码进行修改,工作量非常大。
对于当前使用new 的方式,是指在编译时就决定了当前对象就是UserDAO(),不可能有其他的变化。故考虑在运行时动态的对对象进行创建。
2,在第一个问题的困扰下,Spring最早的版本就出现了
IDao dao = (IDao)new applicationContext.getBean("userDAO")
没有任何与UserDAO,相关的东西,程序编译时并不知道要绑定哪一个对象,只有在运行之后
由applicationContext这个用于管理对象的容器来决定生成哪个对象
userDAO与我们的配置文件是相对应的
配置文件:
<bean id = "userDAO" class="com.imooc.dao.UserDAO"/>
<bean id = "userDAO" class="com.imooc.dao.UserExtDao"/>
userDAO 与userDAO相匹配,实例化了UserDAO对象,在程序运行时由applicationContext
对象动态实例化UserDAO。
如果要将UserDAO改为UserExtDao,只用在配置文件中改为UserExtDao。
通过applicationContext这个用于管理对象的容器,可以将整个程序的依赖有效的进行解耦.
关于控制反转:在原始的情况下,使用new关键字,叫做正向控制,由程序决定创建哪个对象。
控制反转就是将对象的控制权交给第三方的对象容器,由对象容器在运行时创建对象,赋给对应的
变量。IOC的好处是让我们对象与对象的引用进行了解耦,当系统底层的类发生变化时,只需要修
改配置文件即可。
applicationContext:们这个对象的作用就是对配置文件中的对象进行创建和控制,所以
applicationContext这个对象被称为IOC容器。
DI:DI依赖注入,具体的技术实现,是对我们宏观的IOC理念的一种技术上的诠释,在Spring中使用反射二号工厂模式来实现DI,由对象容器运行时动态注入对象。
主要基于
1.反射:在运行时进行运行,创建,办理,
2,工厂模式