基于 Spring 框架的依赖注入研究论文 引言 依赖注入(Dependency Injection)或者说控制反转(Inversionof Control)是 Spring 框架结构的核心之一。基于 Spring 框架结构的系统中,DI 可以为任意对象动态的提供所需,代替了过去在控制对象生命周期和关系时需要直接依靠代码……
基于 Spring 框架的依赖注入研究论文
引言
依赖注入(Dependency Injection)或者说控制反转(Inversionof Control)是 Spring 框架结构的核心之一。基于 Spring 框架结构的系统中,DI 可以为任意对象动态的提供所需,代替了过去在控制对象生命周期和关系时需要直接依靠代码的方式。
1.依赖注入的原理与实现
依赖注入(DI)和依赖查找(Dependency Lookup)共同组成控制反转(IoC)。从原理的角度来说,依赖注入和控制反转是没有不同的,可以看作是从两个角度来阐述一个概念,即基于 Spring的架构系统中,在一个对象(调用者)为另一个对象(被调用者)协助工作(调用)时,不用创建,该调用由 Spring 的 Bean 完成,也就是控制反转。
依赖注入是使用 Reflection 实现的,在 Java 1.3 以后,有一个重要特性是 Reflection 可以当执行系统的`时候,进行动态的创建、运行和修改实例。举个例子,当需要进行数据库操作时,不通过Spring 的做法是在操作中编写命令代码以得到 Connection,通过Spring 的做法是在系统运行中得到 Connection 并注入,来对各个对象进行控制。
依赖注入不仅可以在容器中注入一般属性值,也能将其他引用注入。在实际应用中,如果要调用实例,不再需要各组件应用Factory 模式,也不再需要依靠编写代码实现低耦合,而是可以做到实例的自动提供,也就是达到了程序的“按需分配”。
Bean 的接收和管理由控制反转实现,即定位、配置、实例化并且构造依赖应用程序的 Bean。BeanFactory 是 Spring 框架中的控制反转容器,项目中通常使用 XML 方式来描述对象间的依赖关系,配置元数据,如 XmlBeanFactory 可完成完全可配置系统。
在 Spring 框架中,控制反转管理是通过依赖注入进行的。依赖注入包括设置方式注入(Setter Injection)和构造子注入(Constructor Injection)两种。SI 是通过 JavaBean 属性进行依赖注入,CI 是通过构造子参数进行依赖注入。JavaBean 经由 Spring框架的管理配置可以得到低耦合的系统,实现系统的分层架构。
2.注入方式的对比
既然 Spring 框架支持两种依赖注入方式,即设置方式注入和构造子注入,那么它们各有何优势呢?
设置方式注入可以通过 Setter 很简单直接的进行设定,使得编写代码更加方便自如,这与传统的 JavaBean 很相似,有利于程序员的掌握和使用。设置方式注入还可以解决由于依赖关系复杂,阅读困难构造器太大的问题。
构造子注入不可以通过 Setter 进行设定,其依赖关系均在构造器中完成设定,不依靠 Bean 进行依赖关系的变化,不可能发生依赖关系被后面编写的代码破坏的现象,更能发挥自身的作用。构造子注入可以通过创建组件来实现改变依赖关系,同时由于设定集中在构造器,组件关系高内聚。
3.项目应用
系统的扩展以及维护通过系统组件的松散耦合得以加强,这种低耦合是由业务逻辑与控制器,业务逻辑与 DAO 的依赖来实现的。依赖业务逻辑接口,即针对此进行编程,跟具体实现类以及控制器没有关系,具体实现类以及业务逻辑组件也没有关系。Spring 框架中组件均为 Bean,例如 SessionFactory、事务管理器、数据源等,因此所有组件在应用中的管理均采用Bean 方式,Spring对创建 Bean 以及 Bean 的生命周期来管理。其依赖关系是通过配置文件给 Bean 进行精确的属性注入来组织和运用的,而不是依靠编写代码。
在Action类的内部通过依赖注入使得进行业务逻辑操作的时候,实现低耦合以及组件调用方便。另外,在业务逻辑组件中通过依赖注入底层 DAO 组件完成数据库操作。