IoC and DI JSR-299 JSR-330

来源:互联网 发布:网络维护兼职工资 编辑:程序博客网 时间:2024/05/19 14:00

前言

JSR 299: Contexts and Dependency Injection for the JavaTM EE platform

JSR 330: Dependency Injection for Java

从名称来看可知 JSR 299 主要作用于 JavaTM EE(在JavaSE环境下功能会打折扣),JSR 330 则作用于任何 Java 环境

理解与认知

IoC and DI

普通编程时,程序逻辑的流程通常是由一个功能中心来控制的,而使用 IoC 机制,这个“中心控制”的设计原则会被反转过来。调用者的代码处理程序的执行顺序,而程序逻辑则被封装在接受调用的子流程中。通过一个例子来理解IoC:

例如,在GUI应用中,GUI框架负责控制调用事件处理器,而不是应用逻辑,当用户点击了一个动作,比如“向前”,GUI框架会自动调用 对应的事件处理器,而应用逻辑可以把重点放在处理动作上。程序的控制被反转了,将控制权由应用逻辑转移到了GUI框架(这个其实就是IoC容器)。

IoC机制也被称为好莱坞原则:会有另一段代码拥有最初的控制线程,并且由它来调用你的代码,而不是由你的代码调用它,即控制反转到了框架那里,如SpringMVC编程中,最初的Servlet入口必然是Spring的分发器(DispatcherServlet),这就将控制权交给了 Spring 这个 IoC容器,我们编写的 Servlet(或 Controller)只负责业务处理,不必关系业务的控制流程。

不要给我们打电话,我们会打给你。——好莱坞原则

IoC有多种不同的实现,包括工厂模式、服务器定位模式,当然还有依赖注入。需要注意的是,DI并不等于IoC,DI只是IoC的一种实现方式,IoC是一种机制,IoC机制可以有除了DI以外的各种实现方式,它是一种机制,也是一种思想

DI是IoC的一种特定形态,是指寻找依赖项的过程不在当前执行代码的直接控制之下。Java中为DI提供的容器有Guice、Spring等。DI的好处有:松耦合、易测试、强内聚、可重用、更轻盈的代码。

具体分类的IOC容器的控制反转:

1.DI类的IOC实现是将寻找依赖项的控制权交给了容器

2.服务器定位模式类的IOC实现是将定位服务的控制权交给了容器

3.等等

轻量级的 DI 类的 IoC容器实现 Guice,可以在 JavaSE 和 Servlet中满足我们的控制反转需求,可大大提高程序的开发效率,

当然Spring也有相同的功能,只不过Spring发展到后来还容纳了诸如 事务控制、切面编程等强大功能,已经不单单是一个 依赖注入(DI)容器了,具体用哪个,请自己掂量。


0 0