IOC设计模式初步了解(day02)

时间:2024-08-27 23:07:26

IOC(Inversion of Control):控制反转。

*其他解释:依赖注入、依赖反转……

设计目标:简化JEE的研发工作,提供IOC容器,控制bean的生成、注入,解耦。

看了网上的一些帖子、介绍,书籍中的一些剖析,都不是很了解IOC这个概念,于是找来这么段代码,直接从代码上去理解了。

interface A{

}
public class B implements A { }

正常情况下,我们要使用到A接口的实现都是这样:

A a = new B();

但在IOC实现Spring中则是这样:

@Autowired
public A a;

也就是说,当你要应用不同的实现类的时候,你只需要去配置xml文件,或者修改@service的bean对象,如:

@Service
public class B implements A { }

改成

@Service
public class C implements A { }

而不需要这样子修改:

A a = new C();

这里不去探讨Spring是如何实现的,具体涉及到的反射相关名词,如有兴趣,自行学习。

我们只谈论这样子的好处,经常进行Ajax编程的人,或许对这样子的代码并不陌生:

$.post(url, function(data){
//
});

这里用到的是回调的设计模式,在java中这样的回调通常会与接口挂钩,即传进去的是一个接口实现类(因为java中的函数实现必须要挂载在对象上,而不像脚本语言可以进行函数式编程),所以前端代码中传递的就仅仅是一个匿名函数了,这样的好处就是当你实际运行的时候才去确定你所需要绑定的方法,而非耦合度高的编译时绑定或者硬编码。

实际上这对于Java这种强类型的接口编程语言是相当合适的,至少笔者认为这样可以指导初学者的编程,举个例子,在swing编程中的事件监听你只需要传一个接口实现类(里面对应的方法需要实现)进去即可,而不需要去编写相当复杂的代码逻辑,即把业务逻辑部分的代码抽离出来,让研发人员可以专注在业务逻辑的实现上。Spring很大程度上的一个设计目标就是如此。