1.0时代:需要一个Dao层(接口+ImpL)、对应一个Service层(接口+ImpL)
1、Dao层封装了数据库操作,Service层 ImpL类 通过 new 一个Dao的ImpL类 并赋值给 Dao接口,实现对Dao层的调用,从而达到Dao层对于客户透明的目的。
2、具体代码:
private XXXDao xxxDao = new xxxDaoImpL()
3、缺点:随着客户的需求不断改变,new 的ImpL类也要随之改变,高耦合!
2.0时代:引入了Set进行动态注入ImpL类的思想
1、在Service层ImpL类中,不通过new的方法给Dao接口创建ImpL类,而是加入Set带参函数为Dao接口赋值
2、具体代码:
public void setXXXDao(XXXDao xxxDao){ this.xxxDao = xxxDao; }
3、优点:改变了程序主动创建对象的方式,通过Set带参函数变成了被动接受对象(反转控制),不再因为客户需求的迭代,而改变原有的代码,低耦合!
抽象结果:(IoC容器)
通常new一个实例,控制权由程序员控制,而“控制反转”是指new实例工作不由程序员来做而是交给Spring容器来完成。