`
yinghuayu1324117
  • 浏览: 69524 次
  • 性别: Icon_minigender_2
  • 来自: 保定
文章分类
社区版块
存档分类

依赖注入

阅读更多

依赖注入

1、  什么是依赖?

依赖指的是类之间的访问关系。如果类A访问类B的属性或方法或者类A负责实例化类B,那么可以说类A依赖类B,和关联关系不同,无需把类B定义为类A的属性。在Spring中是通过注入来实现依赖关系的。

2、  什么是依赖注入?

依赖注入背后的基本原理是对象之间的依赖关系(即一起工作的其它对象)只会通过以下几种方式来实现:构造器的参数、工厂方法的参数,或给由构造函数或者工厂方法创建的对象设置属性。

依赖注入作用:容器的工作就是创建bean时注入那些依赖关系。相对于由bean自己来控制其实例化、直接在构造器中指定依赖关系这些自主控制依赖关系注入的方法来说,控制从根本上发生了倒转,这也正是控制反转(Inversion of Control IoC 名字的由来。 应用此原则后,代码将更加清晰。而且当bean自己不再担心对象之间的依赖关系(甚至不知道依赖的定义指定地方和依赖的实际类)之后,实现更高层次的松耦合。

依赖注入的主要注入方式有setter注入和构造器注入。

此外还有接口注入,在此重点介绍setter注入和构造器注入。

3、  setter注入介绍

setter注入通过调用无参构造器或无参static工厂方法实例化bean之后,调用该beansetter方法,即可实现基于setter的注入。

下面通过一个例子进行介绍:

创建一个DAO接口,接口中有insertdelete两个方法,

创建继承此接口的类GoodsDAO

创建一个业务实现类GoodsDAOImpl实现了GoodsDAO接口,

创建一个Goods类,包含nameprice属性,并实现相应的getset方法

创建GoodsAction类进行真正的业务处理,包含一个GoodsDAOImpl类型的属性及其getset方法,还有inertdelete方法代码如下:

public class GoodsAction {

/**GoodsActionImpl的属性名称gdi一定要与 spring配置文件中propertyname的属性名称一致 必须有相应的set方法与get方法  通过此方法(set方法)注入*/

private GoodsDAOImpl gdi;

/***实现相应的getset方法/

……………

public String insert() {

    System.out.println("-------------------------------");

         return "success";

}

public String delete() {

         return "success";

}

}

applicationContext.xml配置文件中进行配置代码如下:

<!-- 定义一个真正业务实现的Bean的实例,通过scope属性指明业务实例对象的作用域 每次请求都会创建一个新实例 -->

<bean id="GDI" class="spr.impl.GoodsDAOImpl" scope="prototype"/>

   

<!-- 处理业务的Action ,创建该bean的一个实例,指明实例的作用域 -->

<bean id="GAction" class="spr.ac.GoodsAction" scope="prototype">

<!-- 通过业务实现类属性gdisetget方法, ref引用的实例注入到gid属性中 -->

 <property name="gdi" ref="GDI"/>

 </bean>

创建Test测试类,在main方法里测试代码如下:

public static void main(String[] args) {

ApplicationContext ac = new ClassPathXmlApplicationContext ("applicationContext1.xml");

GoodsAction ga = (GoodsAction)ac.getBean("GAction");

ga.insert();

}

4、  构造器注入介绍

构造器的注入通过调用带参数的构造器来实现,每个参数代表着一个依赖。

构造器注入方式:构造器参数类型匹配和构造参数索引。

下面通过一个例子进行介绍:

首先在上面的Goods类中添加默认构造器和带有参数的构造器代码如下:

public class Goods {

private String name;

private double price;

public Goods(){

}       

public Goods(String name,double price){

           this.name=name;

           this.price=price;

}       

/***实现相应的getset方法/

……………

}

然后在配置文件中进行配置代码如下:

<bean id="goods" class="spr.impl.Goods" scope="prototype">

<!-- 参数类型匹配, constructor-arg传递构造器的参数,若类中有多个相同类型的属性那么就可以采用构造参数索引方式注入

      <constructor-arg type="java.lang.String" value="hp电脑"/>

      <constructor-arg type="double" value="100"/>

      -->

      <!-- 构造参数索引 -->

      <constructor-arg index="0"  value="hp电脑"/>

      <constructor-arg index="1" value="100"/>

分享到:
评论

相关推荐

    c# 依赖注入 控制反转

    ### C# 依赖注入 控制反转 #### 一、IoC(控制反转)简介 IoC,即"Inversion of Control"(控制反转),是软件工程领域的一个重要概念,特别是面向对象编程中的一个关键设计原则。从字面上理解,IoC指的是程序运行...

    依赖注入那些事儿

    ### 依赖注入那些事儿 #### 1. IGame游戏公司的故事 ##### 1.1 讨论会 IGame是一家专注于开发动作角色扮演游戏的游戏公司。这类游戏通常包含一个基础功能——打怪,即玩家通过攻击怪物来获得经验值、虚拟货币和...

    一个轻量级的PHP依赖注入框架

    依赖注入(Dependency Injection,简称DI)是一种设计模式,它在软件工程中被广泛应用于解耦组件,提高代码的可测试性和可维护性。在PHP世界里,依赖注入框架可以帮助开发者更方便地管理类之间的依赖关系,减少硬...

    .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

    最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在服务调用的时候总是获取到最后注入的那个方法的实现,这...

    spring学习:依赖注入的几种方式讨论

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本文将深入探讨Spring中的依赖注入实现方式,以及如何通过样例文件...

    EFcore Repository 依赖注入方式实现数据库基本操作

    依赖注入(Dependency Injection, DI)是一种设计模式,它有助于降低代码耦合度,提高可测试性和可维护性。本篇文章将深入探讨如何使用EF Core结合依赖注入来实现数据库的基本操作。 1. **EF Core 简介** EF Core ...

    IoC 依赖注入 技术总结

    "IoC 依赖注入 技术总结" IoC 依赖注入技术是软件设计中的一种重要技术,旨在解决软件系统中的耦合问题。该技术的核心思想是将被调用构件实例化,并注入到调用构件之中,以实现软件系统的高内聚、低耦合。IoC 依赖...

    spring依赖注入底层详解

    Spring依赖注入是Spring框架的核心特性之一,它极大地简化了Java应用程序的开发,使得对象之间的依赖关系得以解耦,提高了代码的可测试性和可维护性。本文将深入探讨Spring依赖注入的底层实现机制。 首先,我们要...

    C# (.NET Core 6.0) DI依赖注入 示例

    较为框架式的演示了DI服务依赖注入 适用于熟悉C#中的继承,基本的Core命令使用等. 该示例演示了以服务器集群为背景的各种业务的依赖注入. 示例来自于B站杨中科老师的.NET Core(6.0)教学.

    Angular6依赖注入Demo

    这个“Angular6依赖注入Demo”显然提供了关于如何在Angular6应用中使用依赖注入的实际示例,同时也包含了懒加载(Lazy Loading)的实现,这有助于提高应用程序的性能,因为只有在用户实际需要时才会加载特定模块。...

    PHP依赖注入容器库

    在IT行业中,依赖注入(Dependency Injection,简称DI)是一种设计模式,它有助于提高代码的可测试性、可维护性和灵活性。PHP作为一个广泛用于Web开发的动态类型语言,也有许多优秀的依赖注入容器库来支持这一模式。...

    Spring Ioc 注解 依赖注入

    ### Spring IoC与注解依赖注入详解 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一个开源项目,最初是为了解决企业级应用开发中的复杂性问题而诞生的。Spring框架的核心特性包括IoC(Inversion of ...

    模仿Spring依赖注入

    【Spring依赖注入详解】 在Java开发中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)功能而闻名。依赖注入是一种设计模式,它允许我们解耦组件,使我们的应用程序更加灵活,易于测试和维护。本篇...

    反射与依赖注入DEMO

    在编程领域,反射和依赖注入是两种非常重要的概念,它们都是高级编程技术,可以极大地提升代码的灵活性和可维护性。下面将详细讲解这两个概念及其在实际应用中的DEMO示例。 **反射** 反射是Java(以及其他一些面向...

    详解Spring基于Annotation的依赖注入实现

    在深入探讨Spring框架中基于注解(Annotation)的依赖注入(Dependency Injection,简称DI)实现之前,我们首先需要理解几个核心概念:Spring框架、依赖注入、以及注解本身。 ### Spring框架简介 Spring框架是一个...

    php依赖注入demo

    依赖注入的核心思想是,一个对象不应该负责创建或查找它所依赖的对象,而是应该由外部源(如容器或框架)来提供这些依赖。这样可以减少类之间的耦合,使得代码更加灵活和易于测试。在PHP中,我们通常通过构造函数、...

    Spring 核心机制(依赖注入)

    ### Spring核心机制——依赖注入详解 #### 一、引言 Spring框架作为一款优秀的轻量级Java应用开发框架,其核心理念之一就是依赖注入(Dependency Injection, DI)。依赖注入不仅能够帮助开发者降低代码间的耦合度...

    C++ 依赖注入

    C++依赖注入是一种设计模式,它对于简化软件设计、控制依赖关系、降低耦合度、提高代码的内聚度以及方便进行单元测试具有重要作用。依赖注入的核心思想是将依赖对象的创建和使用分离,通过第三方(例如容器)在对象...

    第三章 Spring4 依赖注入

    【标题】"第三章 Spring4 依赖注入"深入解析 在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种核心的设计模式,它允许我们创建松耦合的代码,提高软件的可测试性和可维护性。Spring4版本进一步优化...

Global site tag (gtag.js) - Google Analytics