写段代码,引出Spring的好处
创建个空工程,然后在工程里建模块
可能是IEAD版本问题,每次建新的空工程,都需要退出重进
设置下maven和Encoding
新建模块
持久层接口
持久层实现类
业务层接口
业务层实现类
控制层(表现层)
建个测试类测试
分析这个程序存在的问题
假设现在新需求是因某种原因需要改变Dao层的实现类
并且在业务层将原先的对象改变成new UserDaoImplForOracle()
这种修改方法,去修改了以前运行正常的代码
违背了OCP开闭原则
软件开发七大原则(所有语言开发软件):
我们希望看到的效果是
但实际出现的问题是,这么写都是null
抛开null的问题,程序这么设计:
1.不再关心具体指向的对象是谁,面向接口编程(DI依赖注入)
2.将创建具体对象的权力交出去(IOC控制反转)
控制反转(IOC Inversion of Control)
1.不在程序中采用硬编码的方式来new对象.(new对象不管了,交出去了)
2.不在程序中采用硬编码的方式维护对象关系。(对象之间关系的维护,不管了,交出去了)
控制反转:是一种编程思想.或者叫做一种新型的设计模式.由于出现的比较新,没有纳入GoF23种设计模式范围内.
Spring框架:通过DI依赖注入实现IOC控制反转
控制反转实现方式有多种.其中比较重要的叫做:依赖注入(Dependency Injection,简称:DI)
控制反转IOC是思想,依赖注入DI是控制反转的实现
依赖注入DI常见两种注入方式:
1.Set注入:执行set方法给属性赋值
2.构造方法注入:执行构造方法给属性赋值
所谓依赖注入就是要给它注入值
那么所谓的DI依赖注入的两种方式
1.Set方法注入
2.构造方法注入
几个术语
OCP:开闭原则,对扩展开放,对修改关闭(开发原则)
PID:依赖倒置原则,面向接口,抽象编程,不要面向具体编程.(开发原则)
IOC:控制反转(一种思想,一种新型设计模式)
DI: 依赖注入(控制反转思想的具体实现方式)