2024年4月16日发(作者:)

IoC——Inversion of Control,控制反转

在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。IoC

是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设

计原则。

DI——Dependency Injection(依赖注入)

即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入

到组件之中。

依赖注入的目标并非为软件系统带来更多的功能,而是为了提升组件重用的概率,并为系统搭建

一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就

可指定目标需要的资源, 完成自身的业务 逻辑,而不用关心具

体的资源来自何处、由谁实现。

1:控制反转:

谁控制谁?控制什么?为何叫反转(对应于正向)?哪些方面反转了 ?为何需要反转?

2:依赖:

什么是依赖(按名词理解,按动词理解)?谁依赖于谁?为什么需要依赖?依赖什么东西?

3:注入:

谁注入于谁?注入什么东西?为何要注入?

4:依赖注入和控制反转是同一概念吗?

5:参与者都有哪些?

6:IoC/DI是什么?能做什么?怎么做?用在什么地方?

还不能完全回答和理解,没有关系,先来看看IoC/DI的基本思想演变,然后再回头来回答这些

问题

IoC容器

简单的理解就是:实现IoC思想,并提供对象创建、对象装配以及对象生命周期管理的软件就

是IoC容器。

IoC理解

1:应用程序无需主动new对象;而是描述对象应该如何被创建即可

IoC容器帮你创建,即被动实例化;

2:应用程序不需要主动装配对象之间的依赖关系,而是描述需要哪个服务

IoC容器会帮你装配(即负责将它们关联在一起),被动接受装配;

3:主动变被动,体现好莱坞法则:别打电话给我们,我们会打给你

4:体现迪米特法则(最少知识原则):应用程序不知道依赖的具体实现,只知道需要提供某类

服务的对象(面向接口编程);并松散耦合,一个对象应当对其他对象有尽可能少的了解,不和

陌生人(实现)说话

5:是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖

的设计原则。

使用IoC/DI容器开发需要改变的思路

1:应用程序不主动创建对象,但要描述创建它们的方式。

2:在应用程序代码中不直接进行服务的装配,但要描述哪一个组件需要哪一项服务,由容器负

责将这些装配在一起。

也就是说:所有的组件都是被动的,组件初始化和装配都由容器负责,应用程序只是在获取相应

的组件后,实现应用的功能即可。

提醒一点

IoC/DI是思想,不是纯实现技术。IoC是框架共性,只是控制权的转移,转移到框架,所以不

能因为实现了IoC就叫IoC容器, 而一般除了实现了IoC外,还具

有DI功能的才叫IoC容器,因为容器除了要负责创建并装配组件关系,还需要管理组件生命周

期。

n工具准备

1:Eclipse + Jdk6.0 ,示例用的Eclipse是Eclipse Java EE IDE for Web Developers,

Version: Helios Service Release 1

2:

构建环境

1:在Eclipse里面新建一个工程,设若名称是Spring3test

2:把发行包里面的dist下面的jar包都添加到Eclipse里面

3:根据Spring的工程来获取Spring需要的依赖包,在联网的情况下,通过Ant运行

projects/build-spring-framework/,会自动去下载所需要的jar包,下载后的包

位于projects/ivy-cache/repository下面。

4:为了方便,把这些jar包也添加到Eclipse里面

开发接口

java代码:

public interface HelloApi {

public String helloSpring3(int a);

}

开发实现类

java代码:

public class HelloImpl implements HelloApi{

public String helloSpring3(int a){

n("hello Spring3==="+a);

return "Ok,a="+a;

}