恋恋桃花岛 手游攻略 新游动态 Spring 框架中的依赖注入与控制反转:概念、作用与实现

Spring 框架中的依赖注入与控制反转:概念、作用与实现

时间:2024-06-04 20:06:21 来源:网络整理 浏览:0

如有不同意见,请留言。

我将尽力做到准确、全面,并将在我的一生中不断修改、补充和更新它。

目录

1 依赖注入概述

依赖注入,英文名为 ,缩写为DI。

DI 和 IoC(IoC 容器详解)含义是一样的,从两个角度描述同一个概念自动友情链接,做的事情也是一样。

当一个 Java 实例需要另一个 Java 实例时,被调用者实例由调用者创建(使用 new 关键字获取被调用者实例)后再使用。使用框架之后,被调用者实例不再由调用者创建,而是由 IoC 容器创建。这就叫控制反转,简称 IoC。

当 IoC 容器创建被调用者的实例时,会自动将调用者需要的对象实例注入到调用者中,这样调用者就通过 IoC 容器获取到被调用者的实例,这就叫依赖注入,简称 DI。

Bean的依赖注入,或者说Bean的组装有多种形式,比如接下来要介绍的基于XML的依赖注入(有两种实现方式:设置注入和构造函数注入)、基于依赖注入、基于自动组装、基于静态工厂依赖注入和基于实例工厂依赖注入。

2 依赖注入的多种方式(Bean组装方法) 2.1 基于XML的依赖注入 2.1.1 (设置方法注入)

设置方法注入又叫方法注入,是最简单的注入方式。

意思是IoC容器通过方法注入来注入依赖实例,通过调用无参构造函数或者无参工厂方法实例化一个bean之后,再调用该bean的方法就可以实现基于DI。

案例练习,出发啦!

目的:通过接口的实现类中的方法初始化的对象。

具体步骤如下:

步骤1:在com..包下创建一个接口。如下图所示:

第二步:在com..包下创建该接口的实现类,在类中声明一个变量,但是不初始化,这里需要一个方法(这个方法是IoC容器的注入入口,相当于IoC容器调用方法初始化变量),如下图所示:

步骤3:在.xml配置文件中添加配置信息。

标签中name属性值为()方法(也叫依赖)的参数;ref属性值为Bean的名称或者id值。添加内容如下所示:

步骤4:编写测试类并使用JUnit运行。在com..test包下的类中创建一个test2()方法,如下所示:

从上图可以看出,使用IoC容器获取到实例之后,会调用该实例的()方法,而在该方法中又调用了接口的实现类中的save()方法(对象是由IoC容器自动调用该方法注入的,本例中该方法就是()方法)。

2.1.2 (构造函数注入)

指 IoC 容器使用构造函数注入依赖实例。基于构造函数的 DI 是通过调用带参数的构造函数来实现的(本文介绍带参数的构造函数)。每个参数代表一个依赖项。容器会根据 bean 中指定的构造函数参数决定调用哪个构造函数。

案例练习,出发啦!

目的:在类中创建成员变量,使用类构造函数注入实例。也就是说,容器在创建类的实例时,也把该实例作为构造函数的参数值传递给类(在配置文件中操作,use标签,ref属性代表Bean的id)。

具体步骤如下:

步骤1:直接在之前的项目中操作,在类中创建一个成员变量,构造函数(),如下所示:

第二步:配置配置文件,如下图:

步骤3:编写测试类,运行JUnit测试。如下图所示:

从上图可以看出,通过容器获取到实例之后,会调用实例的save()方法,在这个方法中又调用了接口的实现类中的()方法(该对象是容器通过构造函数注入的。)

2.2 (基于注解的)依赖注入 2.2.1 (基于注解的)依赖注入概述

如果应用程序中有大量的bean,那么基于XML配置文件实现bean的组装将导致XML配置文件过于臃肿,从而给维护和升级带来一定的困难。

基于(注解)的依赖注入可以解决这个问题。

2.2.2 常见注解概述 2.3.3 先来一个实际的例子

步骤1:导入关键JAR包。然后创建DAO层接口,在com..dao包下创建接口,并添加add()方法。如下图所示:

第二步:创建DAO层接口的实现类。在com..包下创建接口的实现类,并添加DAO层add()方法。使用@注解将该类标记为Bean,相当于配置文件中的写法。如下图所示:

步骤3:创建层界面。如下图所示:

步骤4:创建该层接口的实现类。如下图所示:

步骤5:创建控制层。如下图所示:

第六步:创建配置文件。需要添加更多约束文件。如何将约束文件提交给管理层,请参考博文《开始旅程:第一个程序!》。

第七步:创建测试类,并运行JUnit进行测试。如下图所示:

从上图可以看出,DAO layer、layer、layer的add()方法均成功输出结果。

那么,使用组装Bean的方法已经成功实现了。

2.3 基于自动装配的依赖注入

这篇文章太长了,所以我再写一篇。

请参考博文《基于自动装配的依赖注入详解》。

2.4 静态工厂注入

需要提供一个静态工厂方法()来创建Bean的实例(即()方法返回的类的实例就是要创建的类的实例)。

需要在配置文件中使用标签的--属性来告诉容器调用工厂类中的()方法来获取该Bean的实例。

案例演示如下:

步骤1:在com..包中创建实体类。

第2步:创建一个静态工厂类,并在类中创建静态方法,用于创建Bean的实例。

步骤3:创建配置文件。

步骤 4:创建测试类和 JUnit 测试运行器。

从上面的运行结果我们可以看出,使用静态工厂方法实例化Bean成功。

2.5 实例工厂注入

使用这种方法,工厂类不再使用静态方法创建Bean的实例,而是直接在成员方法中创建Bean的实例。

也就是说需要一个成员方法()来创建该Bean的实例。

在配置文件中,需要实例化的bean并不直接通过class属性指向需要实例化的类,而是通过-bean属性配置一个实例工厂,然后通过--属性来决定使用工厂里的哪一个方法。

案例演示如下:

步骤1:创建一个实体类,并向该类添加say()方法。

第2步:创建实例工厂类,并添加成员方法()。

步骤3:创建配置文件。

步骤 4:创建测试类和 JUnit 测试运行器。

从上面的运行结果我们可以看出,使用实例工厂方法也可以实例化Bean。

【友情链接】 微信公众号:Coder阿杰博客园 【参考文献】

标题:Spring 框架中的依赖注入与控制反转:概念、作用与实现
链接:https://www.llthd.com/news/xydt/16626.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
阴阳师4月22日更新内容:帝释天上线技能调整,红莲华冕活动来袭

阴阳师4月22日更新内容:帝释天上线技能调整,红莲华冕活动来袭[多图],阴阳师4月22日更新的内容有哪些?版本更新

2024-06-04
四川电视台经济频道如何培养孩子的学习习惯与方法直播在哪看?直播视频回放地址

四川电视台经济频道如何培养孩子的学习习惯与方法直播在哪看?直播视频回放地址[多图],2021四川电视台经济频

2024-06-04
湖北电视台生活频道如何培养孩子的学习兴趣直播回放在哪看?直播视频回放地址入口

湖北电视台生活频道如何培养孩子的学习兴趣直播回放在哪看?直播视频回放地址入口[多图],湖北电视台生活频道

2024-06-04
小森生活金币不够用怎么办?金币没了不够用解决方法

小森生活金币不够用怎么办?金币没了不够用解决方法[多图],小森生活金币突然就不够用的情况很多人都有,金币没

2024-06-04