一、IOC原型的推导
一、IOC原型的推导
第一代:我们如果要想使用其他UserDao,就只能在UserService中new对象时改变源码,站在web层的人表示无奈。如图。
第二代:我们在UserService中解耦了Dao和Service层的关联。在Service层中,我们设置了UserDao这个接口类型的属性,然后我们增加了一个set方法,在web层中我们可以通过传参数(多态)来切换我们想要的Dao。
第三代:真正的IOC容器的依赖注入
二、IOC的本质
1.IOC(控制反转)
这是一种设计思想。它是通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。这个第三方则是指IOC容器,它的实现方法是通过依赖注入(DI)。
2.使用IOC之前
我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,程序本身就决定了使用哪个对象。就是第一代中展示的那样。
3.使用IOC后
控制反转后将对象的创建转移给用户。用户可以自己选择使用哪种对象。
程序员的任务就是,不断给用户提供更多的选择,专注于业务的逻辑,而不用再去管对象的创建。
因此:所谓控制反转,就是掌握对象创建的控制权的对象变了,以前是程序,现在是用户。
4.在Spring中IOC实现的两种方式:
使用xml配置
Bean的定义信息和实现分离。
注解
二者可以合为一体。