知识大全 对Spring中接口注入的理解实例分析

Posted

篇首语:不怕学问浅,就怕志气短。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 对Spring中接口注入的理解实例分析相关的知识,希望对你有一定的参考价值。

对Spring中接口注入的理解实例分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   Type 接口注入    我们常常借助接口来将调用者与实现者分离 如:  public class ClassA   private InterfaceB clzB;  public init()   Ojbect obj =  Class forName(Config BImplementation) newInstance();  clzB = (InterfaceB)obj;    ……      上面的代码中 ClassA依赖于InterfaceB的实现 如何获得InterfaceB实现类的实例?传统的方法是在代码中创建InterfaceB实现类的实例 并将起赋予clzB     而这样一来 ClassA在编译期即依赖于InterfaceB的实现 为了将调用者与实现者在编译期分离 于是有了上面的代码 我们根据预先在配置文件中设定的实现类的类名 动态加载实现类 并通过InterfaceB强制转型后为ClassA所用     这就是接口注入的一个最原始的雏形     而对于一个Type 型IOC容器而言 加载接口实现并创建其实例的工作由容器完成 如J EE开发中常用的Context lookup(ServletContext getXXX) 都是Type 型IOC的表现形式     Apache Avalon是一个典型的Type 型IOC容器      Type 构造子注入    构造子注入 即通过构造函数完成依赖关系的设定 如   public class DIByConstructor   private final DataSource dataSource;  private final String message;  public DIByConstructor(DataSource ds String msg)   this dataSource = ds;  ssage = msg;    ……      可以看到 在Type 类型的依赖注入机制中 依赖关系是通过类构造函数建立 容器通过调用类的构造方法 将其所需的依赖关系注入其中     PicoContainer(另一种实现了依赖注入模式的轻量级容器)首先实现了Type 类型的依赖注入模式      Type 设值注入    在各种类型的依赖注入模式中 设值注入模式在实际开发中得到了最广泛的应用(其中很大一部分得力于Spring框架的影响)     在笔者看来 基于设置模式的依赖注入机制更加直观 也更加自然 Quick Start中的示例 就是典型的设置注入 即通过类的setter方法完成依赖关系的设置     SpringFrameWork Developer s Guide Version   September So many open source projects Why not Open your Documents?     几种依赖注入模式的对比总结    接口注入模式因为具备侵入性 它要求组件必须与特定的接口相关联 因此并不被看好 实际使用有限     Type 和Type 的依赖注入实现模式均具备无侵入性的特点 在笔者看来 这两种实现方式各有特点 也各具优势(一句经典废话?)      Type 构造子注入的优势      在构造期即创建一个完整 合法的对象 对于这条Java设计原则 Type 无疑是最好的响应者     我的理解 就是你要通过一种方式来保证对象的引用完整性 type 选择了构造器的方式来实现      避免了繁琐的setter方法的编写 所有依赖关系均在构造函数中设定 依赖关系集中呈现 更加易读     我的理解 使用构造方法就不需要每个属性都写set和get方法了 这样省去了很多的代码      由于没有setter方法 依赖关系在构造时由容器一次性设定 因此组件在被创建之后即处于相对 不变 的稳定状态 无需担心上层代码在调用过程中执行setter方法对组件依赖关系产生破坏 特别是对于Singleton模式的组件而言 这可能对整个系统产生重大的影响     我的理解 使用构造器来实现 那么你需要一次对所有的属性都初始话 相对set方法来说 缺少了一些灵活性      同样 由于关联关系仅在构造函数中表达 只有组件创建者需要关心组件内部的依赖关系 对调用者而言 组件中的依赖关系处于黑盒之中 对上层屏蔽不必要的信息 也为系统的层次清晰性提供了保证     我的理解 spring的这设计就是要屏蔽依赖关系 你只需要对接口编程 而不需要考虑依赖关系的实现 所以对调用者来说 依赖关系是处于黑盒当中      通过构造子注入 意味着我们可以在构造函数中决定依赖关系的注入顺序 对于一个大量依赖外部服务的组件而言 依赖关系的获得顺序可能非常重要 比如某个依赖关系注入的先决条件是组件的DataSource及相关资源已经被设定     我的理解 关于顺序问题 我们来看以下两段代码   public DIByConstructor(DataSource ds String msg)   this dataSource = ds;  ssage = msg;    public DIByConstructor(DataSource ds String msg)   this dataSource = ds;  ssage = msg;      在本例中 顺序不太重要 但是如果message的初始化需要用到datasource 的话 那么就必须要先初始化datasource 所以相对来说 顺序就是确定了      Type 设值注入的优势     对于习惯了传统JavaBean开发的程序员而言 通过setter方法设定依赖关系显得更加直观 更加自然      如果依赖关系(或继承关系)较为复杂 那么Type 模式的构造函数也会相当庞大(我们需要在构造函数中设定所有依赖关系) 此时Type 模式往往更为简洁     我的理解 依赖关系(或继承关系)较为复杂 指的是 属性较多 需要写很多的set和get方法      对于某些第三方类库而言 可能要求我们的组件必须提供一个默认的构造函数(如Struts中的Action) 此时Type 类型的依赖注入机制就体现出其局限性 难以完成我们期望的功能     可见 Type 和Type 模式各有千秋 而Spring PicoContainer都对Type 和Type 类型的依赖注入机制提供了良好支持 这也就为我们提供了更多的选择余地 理论上 以Type 类型为主 辅之以Type 类型机制作为补充 可以达到最好的依赖注入效果 不过对于基于Spring Framework开发的应用而言 Type 使用更加广泛    cha138/Article/program/Java/ky/201311/28069

相关参考

知识大全 控制反转思想的理解实例

  通过依赖注入来从不同的部门获取数据借助其来理解Spring的IOC  [java]  packagexliocdemo;  publicinterfaceDataManagement  //使用该

知识大全 Spring的三种注入方式都是什么

Spring的三种注入方式都是什么?如何选用?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!接口注

知识大全 spring中bean的注入方式的选择

  在spring中提供了三种可供选择的注入方式  提供set/get方法  构造函数  工厂方法的运用  大家对这三种方法的选择都是仁者见仁智者见智一下我是我支构造函数的理由  保证一些重要的属性在

知识大全 简单的实例理解接口的伟大意义

   首先我们必须明确接口是一个类      接口是一个特殊的类又是一个特别有意义的类不是因为它的特殊而是因为

知识大全 Spring中DI设置器注入

Spring中DI设置器注入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java的反射机制可

知识大全 Spring强制向servlet中注入bean的方法

Spring强制向servlet中注入bean的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 对spring的aop理解

   问题   问题想要添加日志记录性能监控安全监测   最初解决方案   最初

知识大全 Spring 依赖注入原理学习

Spring依赖注入原理学习  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先我们来看看Spr

知识大全 模拟spring框架注入实现原理

  定义一些抽象的方法  [java]  packagehuxinspringinjectdao;  publicinterfacePerson  publicvoidsave();  publicv

知识大全 我对抽象类和接口的理解

  MSDN抽象类是从子类发现了公共的东西泛化(也可以说把公共的东西单独提取出来)出父类然后子类继承父类而接口是根本不知道子类的存在方法如何实现还不确定预先定义的  有一个人他叫王麻子那年他生了个儿子