例一 :比如说我们饿了需要吃饭,盛饭的时候可以用大碗或者小碗来盛。这个能盛饭的东西就是一个抽象,在我们的脑海中并没有具体的实物。而具体的实现就是我们的大碗或者是小碗。面向抽象编程会非常灵活,并且低耦合,易于扩展和维护。就比如说人是一个java类,我们拥有吃饭的方法,如果依赖于具体编程,今天用大碗吃饭,明天用小碗来吃,那我就得频繁的去改那个Java方法,如果依赖于抽象(接口),我只是想吃饭,只要这东西能吃饭就行,我需要什么具体容器,就由他人来提供(工厂类提供一个具体实现的向上转型也就是抽象以便吃饭的人可以用),来实现解耦。
例二 : 如果我们需要对sqlServer数据库、oracle数据库、DB2数据库中获取数据。如果使用编程来实现,那每一次更换数据库都需要更改连接数据库的实体类。但如果实现一个接口的话,只需要实现接口,接口中接收到需要连接数据库(名称)的参数,就不需要每次都去更改代码。依赖接口编程,控制关系的反向转移。这就是spring中的AOP(控制反转)。
下边我粘贴代码块举例吧
这是从sqlServer数据库中取得数据的一个实体类
调用上边的实体类,从SqlServer中获取数据。在这里我们如果需要换从oracle中获取数据的话,不仅需要新建一个关于oracle获取数据的实体类。而且需要修改Business。每次业务需求的变动都是影响很多代码的变动。所以我们需要想办法来实现Business的重用。这时候就可以用spring的ioc来实现控制反转。
这是一个获取数据的接口
实现dataBase接口
只针对接口DataBase编码。而不针对实体类
获取数据。这样business类就可以重用。如果我们需要从oracle中获取数据的话。我们只需要实现一个具体负责从oracle取数据的类就可以了
只需要修改testBusiness类就可以达到我们想要的效果。这就是我对于spring中的ioc(控制反转)的以下理解吧。第一次写博客,有什么写的不完整的地方欢迎大家指出来。