Spring依赖注入(DI)的三种方式

高频面试题-项目介绍篇 聊聊如何介绍项目经历。 阅读详情

Spring依赖注入(DI)的三种方式,分别为:

1.  接口注入

2.  Setter方法注入

3.  构造方法注入

 

下面介绍一下这三种依赖注入在Spring中是怎么样实现的。

 

首先我们需要以下几个类:

接口 Logic.java

接口实现类 LogicImpl.java

一个处理类 LoginAction.java

还有一个测试类 TestMain.java

 

Logic.java如下:

package com.spring.test.di;

 

public interface Logic {

    public String getName();

}

 

LogicImpl.java如下:

package com.spring.test.di;

 

public class LogicImpl implements Logic{

   

    public String getName(){

       return "fengyun";

    }

}

TestMain.java

 

package com.spring.test.di;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

 

public class TestMain {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

 

       // 得到ApplicationContext对象

       ApplicationContext ctx = new FileSystemXmlApplicationContext(

              "applicationContext.xml");

       // 得到Bean

       LoginAction loginAction = (LoginAction) ctx.getBean("loginAction");

      

       loginAction.execute();

    }

 

}

LoginAction.java 会根据使用不同的注入方法而稍有不同

 

下面按照注入的方法来看LoginAction.java类

 

Setter方法注入:

 

package com.spring.test.di;

 

public class LoginAction {

 

    private Logic logic;

 

    public void execute() {

       String name = logic.getName();

       System.out.print("My Name Is " + name);  

    }

 

    /**

     * @return the logic

     */

    public Logic getLogic() {

       return logic;

    }

 

    /**

     * @param logic

     *            the logic to set

     */

    public void setLogic(Logic logic) {

       this.logic = logic;

    }

 

}

定义了一个Logic 类型的变量 logic, 在LoginAction并没有对logic 进行实例化,而只有他对应的setter/getter方法,因为我们这里使用的是Spring的依赖注入的方式

 

applicationContext.xml配置文件如下:

<bean id="logic" class="com.spring.test.di.LogicImpl"/>

<bean id="loginAction" class="com.spring.test.di.LoginAction">

 <property name="logic" ref="logic"></property>

</bean>

现在可以运行testMain.java了,我们可以看到控制台打出了 My Name Is fengyun

 

OK了,这就是spring的setter方法注入,非常简单

 

下面我们来看看构造方法注入

顾名思义,构造方法注入,就是我们依靠LoginAction的构造方法来达到DI的目的,如下所示:

LoginAction.java

package com.spring.test.di;

 

public class LoginAction {

 

    private Logic logic;

 

    public LoginAction(Logic logic) {

       this.logic = logic;

    }

 

    public void execute() {

       String name = logic.getName();

       System.out.print("My Name Is " + name);

    }

}

 

这里我们添加了一个LoginAction的构造方法

applicationContext.xml配置文件如下:

<bean id="logic" class="com.spring.test.di.LogicImpl"/>

<bean id="loginAction" class="com.spring.test.di.LoginAction">

 <constructor-arg index="0" ref="logic"></constructor-arg>

</bean>

我们使用constructor-arg来进行配置, index属性是用来表示构造方法中参数的顺序的,如果有多个参数,则按照顺序,从 0,1...来配置

 

我们现在可以运行testMain.java了,结果跟使用Setter方法注入完全一样.

 

 

其中需要注意一点有:构造函数有多个参数的话,如:参数1,参数2,而参数2依赖于参数1,这中情况则要注意构造函数的顺序,必须将参数1放在参数2之前。

 

下面继续说说我们不常用到的接口注入,还是以LogicAction为例,我们对他进行了修改,如下所示:

LogicAction.java

package com.spring.test.di;

 

public class LoginAction {

 

    private Logic logic;

 

    public void execute() {

       try {

           Object obj = Class.forName("com.spring.test.di.LogicImpl")

                  .newInstance();

           logic = (Logic) obj;

           String name = logic.getName();

           System.out.print("My Name Is " + name);

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

}

配置文件:

<bean id="logic" class="com.spring.test.di.LogicImpl"/>

<bean id="loginAction" class="com.spring.test.di.LoginAction">

</bean>

对于接口注入这种方式,以上也只是我个人理解,不知道是否有什么问题。呵呵

 

我们最常用就是Setter和构造函数这两种注入方法,至于他们各自的对比,我想在只要baidu一下就可以有清楚的答案了。

 

对于Spring的依赖注入,最重要的就是理解他的,一旦理解了,将会觉得非常的简单。无非就是让容器来给我们实例化那些类,我们要做的就是给容器提供这个接口,这个接口就我们的set方法或者构造函数了。

 

以上就是我对Spring的DI的一个简单的理解,希望在今后的工作继续深入的学习。

【保姆级教程/代码】使用PRIDE PPP-AR软件解算ZTD、反演GNSS PWV,并评估精度 在本算例中,我下载了BJFS站2024年的IGS ZTD产品,用于评估PRIDE PPP-AR软件解算出ZTD结果的精度。 阅读详情

相关推荐

Eclipse在Mac上报错JNI_CreateJavaVM?可能是你的JDK架构搞错了(附Adoptium JDK下载指南)

本文深入解析了Mac(尤其是Apple Silicon芯片)上Eclipse启动时出现“JNI_CreateJavaVM”错误的根本原因,即JDK架构(aarch64与x86_64)不匹配。文章提供了详细的诊断步骤,并推荐通过下载并配置Eclipse Adoptium提供的aarch64版本JDK来彻底解决问题,同时附上清晰的配置指南。

weixin_29065659的博客 321

【Spring】Spring DI的三种实现方式

DI(Dependency Injection)是AOP中一个重要的概念,作用是给Spring容器管理的对象进行属性值的注入。 注入有三种实现方式: (1)带参构造方法注入 (2)参数对应setter方法注入 (3)参数直接注入(修改访问权限) 1,2是利用配置xml文件进行注入的主要实现方式,3是利用配置注解进行注入的主要实现方式。 注意: (1)如果注入的属性是一个对象,那么还可以配置xml文件或者注解实现对象属性的自动注入。 (2)本文只说明DI的配置方式,不涉及其应用环境。 带参构造方法注入 App

AydenBryan的博客 4523

android usb读写,安卓(Android)下如何开发USB NFC读写器app

对安卓工程师来说,在安卓下使用USB设备需要了解很多硬件的内容,这可能会导致工程周期的延长或者app的不稳定。为了将这种风险降到最低,友我科技发布了NFC读写器在安卓下的sdk,使用NFC读写器的类接口,安卓工程师就可以直接调用NFC读写器了,简单可靠。NFC读写器的安卓库文件为:yoworfidreader.jar在ADT工程中导入yoworfidreader.jar库文件,即可在工程中引用NF...

weixin_36433781的博客 827

Spring DI(依赖注入)的三种注入方式分析

DI的三种常见注入方式为:**setter注入**、**构造器注入**和**基于注解的注入**(也叫field注入),下面来分别讲讲他们的特点。

秃头的博客 2601

这可是全网网工数通方向学习路线最完整,最详细的版本,没有之一

文章篇幅较长,耐心看完你一定有所收获。

最铁头的网工博客 2万+

避坑指南:MTK平台Widevine L1密钥安装全流程详解(含SP META工具使用与Log分析)

本文详细解析了MTK平台实现Widevine L1认证的全流程,涵盖密钥申请、格式转换、安全烧录等关键步骤,特别针对Trustonic TEE环境下的SP META工具使用与日志分析提供实用指南。帮助开发者规避常见错误,确保DRM密钥安全部署,满足高端内容保护需求。

weixin_27219587的博客 477

Spring 依赖注入(DI)三种方式

Spring通过依赖注入(DI)实现控制反转(IOC)的通常有三种方式: 构造方法注入 setter注入(属性) 注解注入(接口) 构造方法注入 先简单了解一下测试项目的结构,用maven构建的,四个包: entity:存储实体,里面只有一个User类 dao:数据访问,一个接口,两个实现类 service:服务层,一个接口,一个实现类,实现类依赖于IUserDao test:测试包 在...

嗜血幽灵的专栏 2155

SAP MTS计划策略40实战:如何配置‘带最终组装的计划‘提升定制化生产效率

本文深入解析SAP计划策略40(带最终组装的计划)的核心机制与实战配置。该策略通过“需求消耗”与“组装灵活性”,有效融合按库存生产(MTS)与按订单生产(MTO)的优势,帮助制造企业在保持通用组件库存稳定的同时,快速响应客户的定制化需求,从而提升生产效率与客户满意度。

ruby5的博客 974

Spring依赖注入(DI):三种核心注入方式解析

摘要: 本文介绍了Spring框架中依赖注入(DI)的核心概念及其三种实现方式(构造器注入、Setter注入、字段注入),重点分析了构造器注入的优势与实现。通过代码示例展示了传统硬编码与DI方式的对比,解释了@Autowired与@Resource注解的区别及适用场景。文章详细演示了构造器注入的实现方法(包括Lombok简化方案),并提供了完整的实体类、DAO层和服务层代码示例,帮助理解DI如何降低耦合度、提高可测试性和维护性。最后指出构造器注入是Spring官方推荐的依赖注入方式。

J_liaty的博客 1994

2024年11月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(一)

软考高级系统架构设计师考试包含三个科目:信息系统综合知识、案例分析和系统架构设计论文。考试形式为机考。本文主要回顾2024年下半年(2024-11-10)系统架构设计师考试上午第二科案例分析的题目,同时附带参考解答、解析和所涉知识点。

一几文的编程学习笔记。 2420

halcon知识:常见三种模板匹配方法总结

halcon的三种模板匹配方法总结,halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类 本文只对形状匹配做简要说明和补充: Shape_Based匹配方法: 上图介绍的是形状匹配做法的一般流程及模板制作的两种方法。 先要补充点知识:形状匹配常见的有四种情况 一般形状匹配模板shape_model、线性变

gongdiwudu的专栏 4万+

Spring 依赖注入(DI)详解 [Spring][依赖注入的 6 种实现方式][setter注入][构造器注入][注解注入][自动装配注入][静态工厂注入][实例工厂注入]

依赖注入,英文叫做 `Dependency Injection`,简称 `DI`。 DI 和 IoC ([《Spring IoC 容器详解》](https://blog.youkuaiyun.com/manongajie/article/details/105943336))含义相同,它们是从两个角度描述的同一个概念、做同一件事情。

码农阿杰的博客 5572

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Spring】DI依赖注入的三种方式

本文主要介绍注入依赖的三种方式,@Autowired,构造方式,setter方式。@Autowired注解的缺陷,@Primary、@Qualifier、@Resource。以及@Autowired和@Resource有什么区别

阿华的博客 1623

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring依赖注入(DI)的三种实现方式

Spring依赖注入(DI)的三种方式,分别为:1.  接口注入2.  Setter方法注入3.  构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的。 首先我们需要以下几个类:接口 Logic.java接口实现类 LogicImpl.java一个处理类 LoginAction.java还有一个测试类 TestMain.java 

chensugang的专栏 1万+

Spring DI 入门详解:三种依赖注入方式 +@Autowired 歧义问题解决

DI(Dependency Injection)直译为“依赖注入”,依赖注⼊是⼀个过程,是指IoC容器在创建Bean时,去提供运⾏时所依赖的资源,⽽资源指的就是对象没有 DI:你得自己买原料、煮茶、做奶盖(自己创建依赖)有 DI:你直接点外卖,奶茶店(IOC容器)做好奶茶(依赖)送到你手上(注入)简单来说,就是把对象取出来放到某个类的属性中结合上篇的IOC文章,我们可以对IOC是 Spring 的核心思想,DI是其具体实现手段这句话应该会有了更深的理解,也就是。

2201_75758787的博客 728

Spring中实现依赖注入(DI)的三种方式

特性@Autowired字段注入Setter 注入构造函数注入构造函数 +​​代码简洁性​​⭐⭐⭐⭐(最简洁)⭐⭐⭐⭐⭐(需手动写构造函数)⭐⭐⭐⭐(Lombok 自动生成)​​可读性​​⭐(依赖关系隐藏)⭐⭐(setter 分散)⭐⭐⭐⭐(构造函数明确)⭐⭐⭐⭐(和手动构造函数一样清晰)​​可测试性​​❌(难以测试)⭐⭐(需手动注入)⭐⭐⭐⭐(直接传入 mock)⭐⭐⭐⭐(和手动构造函数一样)​​不可变性(final)​​❌(不支持)❌(不支持)⭐⭐⭐⭐(支持)

qq_57019146的博客 505

Spring-DI依赖注入的三种方式

DI:Dependency Injection(依赖注入) 从字面上分析: IoC:指将对象的创建权,反转给了Spring容器; DI :指Spring创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设值给该对象。 IoC和DI其实是同一个概念的不同角度描述,DI相对IoC而言,明确描述了“被注入对象依赖IoC容器配置依赖对象”。 所谓的依赖注入,就是属性不创建对象,通过配置文件的配置将Spring容器里面的对象注入给对应的属性 依赖注入有三种方式 1.setter注入,(属性注入) 使用se

Apple_Andy的博客 430

spring的依赖注入DI三种方式介绍

依赖注入DI DI(依赖注入):就是 拿到的对象的属性,已经被注入好了相关的值,直接使用即可。 在Spring中,注入依赖对象可以采用手工装配或自动装配,在实际应用开发中建议使用手工装配,因为自动装配会产生许多未知情况,开发人员无法预见最终的装配结果。 隐式的Bean发现机制和自动装配 在Java中进行装配 在XML中进行装配 值得一提的是,我们在项目中应该优先实用隐式的Bean发...

letgoDream的博客 348

Spring的依赖注入(DI)三种方式

Spring依赖注入(DI)的三种方式,分别为: 1.  接口注入 2.  Setter方法注入 3.  构造方法注入   下面介绍一下这三种依赖注入在Spring中是怎么样实现的。   首先我们需要以下几个类: 接口 Logic.java 接口实现类 LogicImpl.java 一个处理类 LoginAction.java 还有一个测试类 TestMain.java  

习惯沉淀的专栏 381

Spring--IOC控制反转与DI依赖注入的三种方式

Spring--IOC控制反转与DI依赖注入的三种方式1. setter方法注入2.构造器注入3.接口注入 Spring的核心思想是IOC和AOP,IOC即控制反转,包括依赖注入和依赖查找,最主要使用的即依赖注入DI。通常情况下,我们创建对象时,是通过new关键字主动进行的;而DI则是在创建对象时,只设置配置文件,由Spring统一创建对象并调用。这也就是控制反转的由来。 接下来本文将重点介绍依赖注入的三种方式 本文使用maven创建工程,pom.xml中依赖设置如下 <dependencies&g

wildyuhao的博客 239

深入解析Spring依赖注入 DI 的三种方式

Autowired是Spring框架自带的依赖注入注解,其核心作用是:自动装配符合条件的Bean到当前类的属性、方法或构造器中,无需手动创建Bean实例,由Spring容器统一管理和注入。@Autowired可用于字段、构造器、setter方法、方法参数,四种场景各有适用场景,其中构造器注入是Spring官方推荐的方式、而参数注入适用于局部方法需要依赖Bean的场景,灵活性更高。

2401_87174643的博客 814

简单理解什么是Spring中的IOC控制反转和DI依赖注入,Spring对象的三种创建方式

IOC :Inversion of Control 控制反转 DI : dependency Injection 依赖注入 咋一听,控制反转、依赖注入,似乎很高大上的名字,概念比较抽象,但其实慢慢分析,转换成自己的话也不难理解: IOC的理解: 在原始社会的时候,我们需要自己生火、自己挖井。这个时候主动权在自己手里。随着时代的发展我们现在有燃气公司和水利公司。我们现在想喝水直接扭水...

Java开发,人工智能,边缘计算,致力于掌握前沿技术 707

spring依赖注入的三种方式(DI:Dependency Injection)

一、什么是依赖注入,为什么使用依赖注入 依赖:一个类使用了另一个类的对象,这个类就依赖于另一个类 依赖注入:将另一个类的对象通过spring特有的方式放到这个类中,供这个类使用,这就是依赖注入 使用场景:使用IOC已经降低了程序中类与类的耦合度,但是一个类中可能使用了另一个类的对象,这时候就需要使用依赖注入,将一个类的对象注入到另一个类中供它使用。 二、spring使用配置文件方式实现...

布先生 1862
上一篇: struts2 传值方式
下一篇: Spring 和struts1 整合的三种方式
zljjava
博客等级 码龄15年 155粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值