Spring注入:配置注入(set注入和构造器注入)与注解注入

Spring常见的依赖注入多种实现方式 在实际开发中,如果依赖项可能发生变化,或者是可选的,可以考虑使用Setter方法注入。在接口中定义依赖项的setter方法,然后在实现类中实现该方法,将依赖项注入到对象中。注解注入是一种简单便捷的依赖注入方式,可以保证依赖项的可变性。在构造方法中,将依赖项作为参数传入,然后在对象被创建时将其保存在成员变量中。在依赖项上添加注解,然后在对象中使用@Autowired注解将依赖项注入到对象中。接口注入相对于构造方法注入和Setter方法注入,需要定义额外的接口,增加了代码复杂度,但可以保证依赖项的可变性。 阅读详情

注入简介

Spring注入可以理解为是对一个对象进行初始化,也就是省去new的这个步骤,类似于工厂模式一样,通过一个工厂制造出这个对象,如果遇到修改,只需要改一处就行了。实现spring注入一般有两种方法,配置文件,或者用注解。各有不同的作用。

注意:本文中涉及到所以例子均默认加入了spring的包,如果没有加入spring包可以自己百度一下用maven或者手动下载spring的依赖包(这里就不给博客了,还是应该自己动动手吧)

 

配置注入:

不重复造轮子,这里已经说明得很清楚了,介绍了两种方式,set注入和构造注入,并且都很详细。至于这篇文中提及到的第三种:接口注入,本人小白观点,应该用interface来注入,在用mybatis框架时一般会接触到,注入这里本人也不介绍这个了,因为涉及到mybatis另一个框架,比较复杂。

PS:这位作者写的spring系列文章的确可以参考一下,本人也从中获益良多。

http://blog.youkuaiyun.com/lishuangzhe7047/article/details/20740835 

 

注解注入:

自动装配

在了解注解注入之前,需要先了解一下自动装配这个概念,这篇博客也说得比较详细,可以先参考这个知道一些概念,由于这篇博客没有给出很详细的例子,所以这里本人会给个例子。

http://blog.youkuaiyun.com/lishuangzhe7047/article/details/20742427 

首先介绍一下文件结构,Main主要来调试运行,Bean其中一个对象,Test,Bean所依赖的一个对象(也就是Bean成员里有Test对象),如图:

Main.class

 

Bean.class

 

Test.class

 

这里是配置文件

 

从这里可以看出,在bean那里有一个autowrite,这个字段就是用来自动装配的。可以看见在<property>这个标签中我没有写test的引用,这就是自动装配,可以根据名字(byName),也可以根据类型(byType)。所以这里的输出如下

 

如果这里我去掉了autowirte这个字段,由于我也没有在<property>里面引用test,所以这里的test会是空,并且会报错,因为Bean里面的test没有被初始化,所以test里面的getN调用不了,会NullPointer,如下图所示。

 

 这里,基于去掉autowrite的基础上,我加一个<property>的test引用,这样又变成了手动装配了,就和上面给的第一篇博客的做法一样了。配置文件如下

 

 所以其实自动装配其实就是类A中有对类B的依赖关系(即A类的成员中B类的成员,记得这概念啊),然后可以通过自动注解初始化B类(但还是需要在配置文件中写B类的<bean>标签的)

 

注解注入

了解了自动装配,就可以了解一下注解注入,因为就是基于自动装配这一概念的,不同的是注解注入不用在配置文件中配置这么多,只需要配置一点点就可以了,剩下的全部用注解来实现。

还是刚刚那个例子,把配置文件改一下,去掉那些<bean>标签,加一个这个标签

 

其中base-package是自己的包名,如果有多个包名可以用分号隔开(分号在引号中)

然后再在目标类上面增加一些注解,如图

Bean.class

 

仅仅在类上面加了个注解,这里的注解其实也可以写@Controller或者@Service,这些个注释从注入效果来说没有什么区别,只是一些逻辑的不同,可以理解为一个变量可以这样声明int number,也可以这样声明int n,只是名字不同而已。然后在Test那个地方加了一个@Resource,其实也可以写@Autowirte,不过官方貌似比较推荐些@Resource,其实两个作用也是一样的。这里的@Resource就可以理解为是配置文件中autowirte字段,这里的@Repository可以理解为配置文件里面的<bean>标签。

 

Test.class

 

Main.class不变

然后这样运行一下,如图

 

发现Bean中的String 对象是null,int值是0,而test的int 也是0。这里其实就是没有给这些字段初始化。但是Bean对象和Test是初始化了的(要追究到jvm的话就是Bean和Test都申请了一块内存)。这里也可以理解为调用了Bean和Test的默认构造函数,以为默认构造函数是空的,所以就是什么都没有初始化。这里也可以自己重写默认构造函数,例如把Test.class里面的默认构造函数那段注释去掉,然后运行结果如下:

 

这就是注解注入

 

配置注入VS注解注入

其实可以看出来,这两种的本质其实就是调用了构造函数,不过配置注入中的set注入是在调用构造函数后从配置文件里面读值然后set进去,构造注入是选择了特定的构造函数进行构造。注解注入就是调用了默认构造函数。如果要在注解注入中初始化对象成员中的值(例如本例中Bean的String 对象的值),那就需要在默认构造函数中进行初始化。

选择配置注入的好处

配置注入其实和工厂模式差不多,但选择配置注入的好处在于可以把值和代码分开,方便管理,可以在配置文件中赋值

选择注解注入的好处

虽然注解注入又把注解和代码混在一起了,但是也可以方便把配置和类对应起来,而且配置比较简单,写个注解就行了。但是如果你要用注解配置初始化值,就只能在默认构造函数中写。

所以一般常用的是,如果需要值的注入,一般用配置注入,例如数据库连接类,就也可以在那里初始化用户名和密码;如果是无具体值的类,例如只用方法的类,像那些controller和那些service,虽然里面有一些对象,但这些对象不需要给什么值,只要new一个对象就行了,这种一般就用注解注入。

构造器注入详解 Spring中依赖数注入的推荐方式,以及为什么使用构造注入时可不用@Autowired 阅读详情

相关推荐

Spring 中使用 set方法/构造方法/注解方式/自动装配 依赖注入

一、set方法注入 1.导入Spring 框架中所需要的 jar包 (4个spring 框架包,1个依赖包) 具体查看:https://blog.youkuaiyun.com/Altitude_/article/details/100183138 2. 配置 Spring 的约束信息 具体查看:https://blog.youkuaiyun.com/Altitude_/article/details/100183138 3. 书写代码 package com.wx.dao; public interface UserDao { p

Altitude_的博客 1045

构造器注入

构造器注入

m0_72963823的博客 4065

必看!wechat-article-exporter:轻松批量下载公众号文章

微信搜索“”关注公众号。在信息爆炸的时代,我们每天都会接触到大量优秀的微信公众号文章。有时候,我们想要将这些精彩的内容保存下来,以便日后回顾或者分享给更多的人。然而,微信公众号并没有提供直接的批量下载功能,这给我们带来了不少困扰。今天,我要给大家分享一款非常实用的软件——wechat-article-exporter,它能够帮助我们轻松地批量下载微信公众号文章,让你不再为文章的保存而烦恼。

王乐平 技术博客 4355

spring的注入(set注入、构造器注入)

一、介绍1.set注入和构造器注入是什么?2.通俗的理解已知:当前的spring框架不需要自己创建对象了。这些对象都交给spring的bean容器去管理。那么想要这些对象想要关联起来或者传值进去怎么办呢?那就要用到注入。例如一个Cat猫类对象想要使用Dog狗类中的方法。那么怎么办呢?按照以前没有使用spring的思路就是:在Cat类中去实例化Dog类,然后调用Dog类的方法用spring后:那就是在统一托管对象的spring容器里面去调用就好了。

快乐学习 7696

智能车实战——从ADC采集到PWM控制,让电磁车精准循迹

本文详细介绍了电磁循迹智能车的实现原理与实战技巧,涵盖从ADC信号采集、PWM控制到PID算法整定的全流程。通过STM32代码示例解析电感信号处理、差比和偏差计算及电机驱动等关键技术,帮助开发者快速掌握智能车精准循迹的核心方法,提升电磁车竞赛项目的开发效率。

weixin_29192211的博客 301

热力学仿真软件:Fluent_(13).燃烧与化学反应仿真

燃烧模型在热力学仿真软件中扮演着至关重要的角色。Fluent 提供了多种燃烧模型,包括层流预混燃烧模型、湍流预混燃烧模型、非预混燃烧模型、部分预混燃烧模型等。这些模型可以帮助用户模拟不同的燃烧过程,从而更好地理解燃烧现象和优化燃烧系统设计。

kkchenjj的博客 1252

spring IoC——用配置文件实现

spring IoC——用配置文件实现目录说明总的配置IoC 注入的三种方式1. setXxx()方法进行注入,通过bean的名称进行注入2. 构造器进行注入,通过bean的类型进行注入3. 自动注入,通过配置不同的全局属性,来完成三种不同的配置IoC 定义生命周期方法的三种方式1. 通过实现初始化方法和销毁方法的接口来实现功能2. 通过配置bean的属性来定义初始化方法和销毁方法3. 通过配置...

qq_37051166的博客 470

Spring Framework 7.002.Spring IoC 容器与 Bean 简介(Introduction to the Spring IoC Container and Beans)

摘要:Spring框架的核心技术包括IoC容器和AOP技术。IoC容器通过依赖注入实现控制反转,提供Bean管理和配置功能。ApplicationContext作为BeanFactory的扩展,增加了企业级特性。文档详细介绍了容器配置、Bean定义、依赖注入、作用域等核心概念,以及基于注解的配置方式。AOP框架支持80%的AOP需求,并可集成AspectJ。此外还涵盖环境抽象、容器扩展点等高级特性,为Java企业应用开发提供全面支持。(150字)

无 213

Spring学习之IOC

一.IOC(Inversion of Control,控制反转),获得依赖对象的方式反转了(所以也可以叫做DI依赖注入),传统方式是自己主动new一个object来获得对象,而使用spring IOC则是将获得对象的过程交给spring来实现,以此来解耦,换句话说,就是由spring来负责控制对象的生命周期和对象间的关系。 二.spirng IOC的2种方式:                

黄国攀的博客 257

[Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译

本文介绍了如何使用Python调用Dify的API实现文本翻译自动化。Dify作为AI开发平台,其工作流功能可执行文本处理、翻译等任务。选择Python调用Dify的优势在于职责划分清晰:Dify专注AI服务,Python处理文件操作等非AI任务。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1096

科研绘图系列:R语言绘制差异蝴蝶图(Butterfly Chart)

科研绘图系列:R语言蝴蝶图(Butterfly Chart)

专注生信领域 1391

spring-- IOC(一)

简介 spring 的ioc 全称为 Inversion of Control,翻译为“控制反转”,又被称为DI(Dependency Injection),依赖注入。所谓IOC,即由spring ioc容器来负责对象的生命周期和对象之间的关系。 1.spring IOC容器的实现:BeanFactory和ApplicationContext BeanFactory的接口的实现类,实现了容器的基...

feicongcong的博客 360

33、AI赋能5G/6G通信:LDPC码解码与强化学习技术解析

本文探讨了基于AI和强化学习的LDPC码技术在5G/6G通信中的应用。包括LAMS解码器、神经MS解码器、盲识别方法、统一极性-LDPC解码器、NNMS和SNNMS解码器、N-2D-NMS解码器、神经分层MS解码器、MAB-NS方案以及强化学习与MCTS结合的技术。这些技术在提升解码性能、降低计算复杂度和增强系统适应性方面表现出色,为未来通信系统的发展提供了强有力的支持。

lambda的博客 242

Spring-IoC和DI

Spring-IoC1. 概述2. 第一个 Spring 应用程序2.1 POM2.2 创建接口与实现2.2.1 创建 UserService 接口2.2.2 创建 UserServiceImpl 实现2.3 创建 Spring 配置文件2.4 测试 Spring IoC 1. 概述 控制反转(IoC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部

输入技术、输出想法 226

机器人视觉联动精度优化:从±2mm到±0.02mm,产线级手眼标定全实战

2025年我接东莞长安Type-C接口分拣项目的时候,就是栽在了手眼标定上:实验室里标定完精度±0.5mm,一到产线直接掉到±2mm,机器人10次有3次抓不住,2000多件Type-C接口直接报废,还撞坏了2套汇川SCARA机器人的吸盘,本来45天的工期拖了3个月,不仅没赚到钱,还倒贴了几万块。手眼标定从来不是简单的跑个demo、算个矩阵就完事了,它是一个系统工程:从硬件选型、安装固定、相机标定、标定流程、算法优化、环境控制、重复验证,每一个环节都会影响最终的联动精度。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 386

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

项目中使用aop 和 ioc

我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂。我们是在项目中如何使用 aop和ioc的呢,在我们知道这个答案之前我们需要了解spring 中的aop 和ioc是什么。 一、Spring开源框架的简介 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在...

qq_31153865的博客 2031

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring笔记

Spring IOC:控制反转(DI:依赖注入) 搭建Spring环境 下载jar https://maven.springframework.org/release/org/springframework/spring/ 解压spring-framework-4.3.9.RELEASE-dist 开发Spring至少需要使用的jar(5+1): spring-aop.jar 开发AOP特性时需要的JAR spring-beans.jar 处理Bean的jar spring-context.jar

LA_LA_LA_HAHAHA的博客 287

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring5 学习笔记 2

IOC容器 底层原理 IOC接口(Bean Factory) IOC操作 Bean管理(基于XML) IOC操作 Bean管理(基于注解)

swy521025718的博客 292

spring:setter注入构造器注入注解注入

一。内容回顾 简述对spring框架的了解 优点 高内聚低耦合 可拔插式设计模式 XML配置 便于维护 Sping 可以和各大优秀的框架很好结合(Struts2 springmvc mybatis hibernate) Spring 一站式开发(springmvc spring JdbcTemplate) 底层原理:反射,代理机制 搭建spring框架步骤 1.导入jar包 2.创建spring...

java_dingbg的博客 3959

Spring 属性注入和注解自动注入

Spring属性 xml文档注入和注解自动注入

m0_52325708的博客 2712

spring四种依赖注入方式 (set,构造器,工厂,注解 )

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制

King-Blog 1万+

java 构造器注入_Spring学习笔记1—依赖注入(构造器注入、set注入和注解注入)...

什么是依赖注入在以前的java开发中,某个类中需要依赖其它类的方法时,通常是new一个依赖类再调用类实例的方法,这种方法耦合度太高并且不容易测试,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的方式依赖注入有3种方式:构造器注入、set注入和注解注入。1.构造器注入构造器注入保证一些必要的属性在Be...

weixin_34717961的博客 2515

spring IOC容器的三种注入方式

spring IOC容器的三种注入方式 set方法注入 把需要注入的类写成属性,给它设置一个set方法。实现代码如下: public class B { private A a; public void setA(A a){ this.a == a; } } 接着在配置文件中类A注入到类B里面去 &amp;amp;lt;bean id=&amp;quot;aa&amp;quot; class=&amp;quot;com.study.j

qq_43489222的博客 9133

Spring学习笔记1—依赖注入(构造器注入、set注入和注解注入)

什么是依赖注入 在以前的java开发中,某个类中需要依赖其它类的方法时,通常是new一个依赖类再调用类实例的方法,这种方法耦合度太高并且不容易测试,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。 依赖注入的方式 依赖注入有3种方式:构造器注入、set注入和注解注入。 1.构造器注入 ...

aiganxie2129的博客 554

spring default-autowire 构造器和set属性注入行为

XML 时代的:通过集中配置定义全局注入规则,但灵活性低。现代 Spring Boot:使用注解(@Autowired@Qualifier)实现更精确的注入控制,完全取代 XML 配置方式。构造器注入是当前的首选方案。

lanwp5302的博客 938
上一篇: 构造方法注入
下一篇: spring框架学习 依赖注入
Hack_Bug
博客等级 码龄15年 34粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值