这个思想,我听一遍就懂了。思想的事情,需要每一句话不断琢磨,IOC就是一个根本性的变化,理解后就会有一种大彻大悟的感觉,呼吸都会顺畅很多。学习之前,要多感受传统开发下,在业务层实现类(ServiceImpl)下调用接口实现类(DaoImpl)的瓶颈。
问题
在我们之前的业务中,用户的需求可能会影响我们原来的代码, 我们需要根据用户的需求去修改原代码,如果程序代码量十分大,修改一次的成本代价身份昂贵。
开发顺序
1.Dao接口
2.DaoImpl实现类
3.Service接口
4.ServiceImpl业务实现类
用户是从业务层(只有逻辑代码)进入
IOC
在传统ServiceImpl中直接new一个Dao层实现类,一个业务一个实现类,导致每增加一个用户功能都会导致new的实现类发生改变。导致,代码波动很大,所以,在ServiceImpl中,直接添加DaoImpl的set方法,形成接口,这样就可以在用户层面统一调用set方法进行更新功能。
ServiceImpl
总之一句话,就是使系统的耦合性降低了。更加灵活了。可以专心的在功能上进行开发,省去在植入功能上的烦恼。
这是IOC的原型,Spring就是基于这个原型,进行开发。
深入理解
传统开发就是在业务层实现接口类(ServiceImpl)下写死
(UserDao dao=new UserDaoImpl)
每次进行功能更新,都需要程序员进行不断地在ServiceImpl下更改实现类接口下的接口实现类(DaoImpl)。所以控制权在程序员手里。
所以,经过IOC思想的反转,发生了根本性的变化,通过在业务层实现接口类(ServiceImpl)下声明实现类接口(Dao),添加set接口,灵活更改实现类接口中的接口实现类(DaoImpl),使关注点就全部转移到了用户层的实现功能上,所以控制权转移到了用户。
IOC本质
控制反转是一种设计思想,DI(依赖注入)是实现IOC的一种方式。
控制反转是一种通过描述(XML或注解)并通过第三方生产或获取特定对象的方式。在Spring中实现控制反转的是LoC容器,其实现方法是依赖注入(Dependecy Injection,DI)。