spring基础概念1

来源:互联网 发布:爱知中学高中部怎么样 编辑:程序博客网 时间:2024/06/06 15:50

一,什么是控制反转?
控制反转是容器装配组件的一种模式,即IOC,Martin Fowler深入探索了“控制反转”的工作原理,并为其起了一个新的名字“依赖注入”,即DI。
但从字面上很难理解“控制反转”所表达的含义,其实在编程时,开发人员常说的“实现必须依赖抽象,而不是抽象依赖实现”就是“控制反转”的一种表现方式。
通过IOC来实现业务逻辑从数据库中取数据的问题可能有3种:
1.从SQL Server数据库中取数据
2.从DB2数据库中取数据
3.从Oracle数据库中取数据。
二,举例说明为什么要通过从IOC来实现业务逻辑从数据库中取数据?
(1)以从SQL Server数据库中取数据为例具体步骤如下:
1.先编写一个从数据库中取数据的类SqlServerDataBase.java
这里写图片描述
2.业务逻辑类Business.java通过SqlServerDataBase.java中的方法从SQL Server数据库中取数据。
这里写图片描述
以上程序编写的不足:Business类依赖于SqlServerDateBase类,如果业务改变,用户要求从DB2或Oracel数据库中 取数据,则这个程序就不适用了,必须要修改Business类。
(2),以从DB2数据库中取数据为例,具体步骤如下:
1.编写一个从DB2数据库取数据的类DB2DataBase类这里写图片描述
2.因为改为从DB2数据库中取数据,所以业务逻辑类Business.java通过DB2DataBase.java中的方法从DB2数据库中取数据。
这里写图片描述
这里写图片描述
(3)同样这时,用户要求从Oracle数据库中取数据,这个程序就不适用了,方法也如上
这里写图片描述
这里写图片描述
得出的总结:这不是一个好的设计,因为每次业务需求的变动都需要程序的大量修改,我们可以通过IOC来解决这个问题,它可以通过面向抽象编程来改变这种情况。

通过IOC来实现这个功能的具体步骤如下:
1.编写获取数据的接口DataBase
这里写图片描述
2.编写一个从SQL Server数据库中取数据的类SqlServerDataBase,该类实现了接口DataBase
这里写图片描述
3.编写一个业务逻辑类Business,该类只针对DataBase编码,而不是针对实体类。
这里写图片描述
4.编写测试类TestBusiness
这里写图片描述
通过这种方式Bussiness类就可以得到重用,不管从哪个数据库中获取数据,Business类都不需要改动,只需要实现具体的DataBase接口即可。
例如,用户要求改为从DB2数据库中获取数据,只需要实现一个具体负责从DB2数据库中取数据的类就可以了。
5.编写具体负责从DB2数据库中取数据的类DB2DataBase,该类实现了接口DataBase
这里写图片描述
6.业务逻辑类Business不用做任何的改动,只需修改测试类TestBusiness
这里写图片描述
如果用户又要求改为从Oracle数据库中获取数据 ,方法如上。
总结:通过接口来编程,实现了控制反转,并且使代码获得了重用,这也就是所说的“实现必须依赖抽象,而不是抽象依赖实现”。以上的例子就是采用Set注入的方式。

1 0
原创粉丝点击