【Spring】学习笔记4——Spring中有几种注入方式?

Spring——Bean注入几种方式(放入容器) Spring系列初体验,使用Spring怎么能不知道这几种将Bean放入容器中的方法呢?XML、注解、实现接口.. 阅读详情

Q:Spring中有几种注入方式?他们之间有什么区别?能否说下其原理?

带着问题找解决方案:

首先Spring中有三种常用的注入方式,分别是:

1.设值注入(setXX注入常用)

2.构造器注入(constructor-arg,死了的应用)

3.注解注入(@....)

4.接口注入(不推荐)

一、我们先来说说第一种set注入。

提示:不需要get方法可以不用生成。参数比较多的话,一起生成也没关系。

1):model:

package com.cn.Singit.Student;

public class Student {
	String name ;
	String sex;
	int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}
	
}

2):xml:

<bean id="Student" class="com.cn.Singit.Student">
    <property name="id" value="1"></property>
    <property name="name" value="student"></property>
    <property name="sex" value="男"></property>
    <property name="age" value="18"></property>
</bean>

3):Test

public class Test{
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
                                 
        Student student = (Student) context.getBean("student");
        System.out.println(student);                                 
    }
}

 

二、构造函数注入

 

构造器注入依赖于构造方法的实现,----------构造方法可以是有参数的,也可以是无参数的 。

在没有spring之前,我们在大多数情况下,我们都是通过构造方法来创建类对象,

Spring可以采用反射的方式,通过构造方法来完成注入,这就是构造方法的原理。

1.引入spring的支持

2.通过描述具体的类,构造方法和其中的参数,这样spring就可以通过相应的信息用反射的方式创建对象。

3.在test文件中加载spring配置文件的方法

String configLocation ="applicationContext.xml";

ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);

在spring中一切的资源都是靠bean来注入的。

1):model

package com.cn.Singit.Student;

public class Student {
	String name ;
	String sex;
	int age;
	
	public Student(String name, String sex, int age) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}
	
}

2):XML

<bean id="student" class="com.cn.Singit.Student">
    <constructor-arg name="id" value="1"/>
    <constructor-arg name="name" value="小明"/>
    <constructor-arg name="sex" value="男"/>
    <constructor-arg name="age" value="18"/>
</bean>

说明:<constructor-arg name="id" value="1"/>也可以改成<constructor-arg index="0" value="1"/>方式;boolean的值既可以用0/1填充,也可以用true/false填充

注意:构造器注入和setter注入都是通过java的反射技术得以实现的。

首先将构造方法设置为无参的构造方法,然后利用setter注入为其设置新的值,

这也是通过java的反射技术得以实现的

三、注解注入:(用的最多)

在介绍注解注入的方式前,先简单了解bean的一个属性autowire,autowire主要有三个属性值:constructor,byName,byType。

constructor:通过构造方法进行自动注入,spring会匹配与构造方法参数类型一致的bean进行注入,如果有一个多参数的构造方法,一个只有一个参数的构造方法,在容器中查找到多个匹配多参数构造方法的bean,那么spring会优先将bean注入到多参数的构造方法中。

byName:被注入bean的id名必须与set方法后半截匹配,并且id名称的第一个单词首字母必须小写,这一点与手动set注入有点不同。

byType:查找所有的set方法,将符合符合参数类型的bean注入。

下面进入正题:注解方式注册bean,注入依赖 

主要有四种注解可以注册bean,每种注解可以任意使用,只是语义上有所差异:

@Component:可以用于注册所有bean
@Repository:主要用于注册dao层的bean
@Controller:主要用于注册控制层的bean
@Service:主要用于注册服务层的bean

描述依赖关系主要有两种:

@Resource:java的注解,默认以byName的方式去匹配与属性名相同的bean的id,如果没有找到就会以byType的方式查找,如果byType查找到多个的话,使用@Qualifier注解(spring注解)指定某个具体名称的bean。
@Resource
@Qualifier("userDaoMyBatis")
private IUserDao userDao;

public UserService(){
@Autowired:spring注解,默认是以byType的方式去匹配与属性名相同的bean的id,如果没有找到,就通过byName的方式去查找,
@Autowired
@Qualifier("userDaoJdbc")
private IUserDao userDao;
写在最后:虽然有这么多的注入方式,但是实际上开发的时候自己编写的类一般用注解的方式注册类,用@Autowired描述依赖进行注入,一般实现类也只有一种(jdbc or hibernate or mybatis),除非项目有大的变动,所以@Qualifier标签用的也较少;但是在使用其他组件的API的时候用的是通过xml配置文件来注册类,描述依赖,因为你不能去改人家源码嘛。

注意:注入过程中必须保证名称的一致。不然会报 UnsatisfiedDencyException异常。

四、接口注入

有时候资源并非来自于自身的系统,而是来自于外界,

比如说数据库连接资源完全可以在Tomcat下配置,

然后通过JNDI的方式去获取它,这样的数据库连接资源就属于开发工程外的资源。

Spring中property和ied-arg区别

 

Spring三种常用的注入方式比较(优缺点):

接口注入:接口注入模式因为具备侵略性,要求组建必须与特定的接口相关联,所以并不被看好,实际应用有限。

Setter注入:Setter注入更为直观,如果依赖关系较为复杂,构造子注入模式的构造函数也会相当庞大,此时Setter注入就显得更为简洁、如果用到了第三方类库,要求我们提供一个默认的构造函数,此时构造子模式就不大适用了。

构造器注入:在构造期间完成一个完成的合法的对象。所有依赖关系在构造函数中集中呈现。依赖关系在构造器时由容器一次性设定,组建被创建后一直处于相对不变在稳定状态。只有组建的创建者关心其内部的依赖关系,对调用者而言,改依赖关系处于“黑盒”之中。

总结

为什么需要使用注入方式?一句话归结:

理论上:构造函数注入原则上java使用更符合更合理,Setter注入作为补充。

实际上:setter注入可以取得更加直观的效果,在工作上有不可比拟在优势,所以Setter注入依赖关系应用更加广泛。

Spring常用的三种注入方式 Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入。构造方法注入先简单看一下测试项目的结构,用maven构建的,四个包:entity:存储实体,里面只有一个User类dao:数据访问,一个接口,两个实现类service:服务层,一个接口,一个实现类,实现类依赖于IUserDaotest:测试包 在spring的配置文 阅读详情

相关推荐

这6种 Spring 依赖注入方式,你都会吗?

Spring框架提供了多种依赖注入方式,包括构造器注入、Setter方法注入、接口注入、自动装配、注解注入和Java配置等。不同的注入方式适用于不同的场景,开发人员可以根据具体需求选择合适的方式。依赖注入使得应用程序的组件之间解耦合,提高了代码的可测试性、可维护性和可扩展性。通过灵活使用Spring框架提供的依赖注入方式,可以更加方便地管理和维护应用程序的依赖关系,从而提升开发效率和代码质量。在实际开发中,根据具体的需求和项目特点,我们可以组合使用不同的依赖注入方式。

m0_71777195的博客 1688

Spring一共有几种注入方式?

Spring一共有几种注入方式?

水w的博客 3422

Spring 注入的几种方式以及含义原理

今天遇到一个问题,就是在websocket中无法调用我通过@Autowired 字段注入的对象,然后回头恶补了一下Spring相关姿势首先先解释一些基础定义。

wangmourendecsd的博客 1212

Spring 注入方式

Spring 注入方式有三中 1.setter注入 2.构造器注入 3.基于注解的注入 1.setter注入 在InjectionServiceImple 中有 变量 injectionDao 并有其的set方法 还有一点需要注意:如果通过set方法注入属性,那么spring会通过默认的空参构造方法来实例化对象,所以如果在类中写了一个带有参数的构造方法,一定要把空参数的构造方法写上,否则spring没有办法实例化对象,导致报错。 2.构造器注入 注意:配置文件中的nam.

Imzhipo的博客 8702

spring注入Bean的几种方式

spring注入Bean的几种方式

1028

Spring 依赖注入有几种?各有什么优缺点?

本篇文章主要内容来自于“Java中文社群”,真的写的太棒了!同时融入我自己的理解,希望能帮助到大家更加深入的去理解Spring注解注入的方式及优缺点!面试不再担忧~

CYK_byte的博客 2948

Spring注入Bean的几种方式

通过注解注入Bean 背景 我们谈到Spring的时候一定会提到IOC容器、DI依赖注入,Spring通过将一个个类标注为Bean的方法注入到IOC容器中,达到了控制反转的效果。那么我们刚开始接触Bean的时候,一定是使用xml文件,一个一个的注入,就例如下面这样。 <bean id="bean" class="beandemo.Bean" /> 复制代码我们的项目一般很大的话,就需...

weixin_33933118的博客 3万+

【C++】auto关键字(C++11,超详细解析,小白必看系列)

本文详细解析了C++中的“auto”关键字,介绍了其定义、基本用法、限制和高级用法,特别是与范围for循环和Lambda表达式结合的应用。

m0_73494049的博客 6万+

spring的注入bean的几种方式

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

岁月无痕的博客 1万+

利用dpabi和restplus提取ROI灰质体积学习笔记

目录前言一、数据准备二、利用dpabi提取ROI灰质体积三、restplus提取ROI灰质体积 前言 我利用SPM/CAT12进行灰质、白质、脑脊液分割之后分别已经得到各自的图像文件,在全脑水平已经做了统计分析。如果还想要进一步进行ROI的统计分析或者与量表等临床资料做相关分析,就需要提取ROI灰质体积。几个月没动过这数据了,突然心血来潮想学一下如何提取ROI灰质体积,以此篇博客记录我的提取ROI灰质体积学习过程。提取ROI灰质体积的方法及软件有许多种,本人尝试了dpabi和restplus。 一、数据准备

weixin_52073820的博客 9224

CloudCompare 二次开发:插件中的 PCL 环境配置与编程

在进行 CloudCompare 的二次开发过程中,我们常常需要使用点云库(Point Cloud Library,简称 PCL)来处理和分析点云数据。在 CloudCompare 的界面中,选中一个点云对象,然后点击菜单栏中的 “插件” -> “MyPluginAction”。插件将对选中的点云对象进行体素滤波处理,并更新显示结果。下面我们将展示一个简单的插件编程示例,该示例使用 PCL 对输入的点云数据进行体素滤波处理。方法进行体素滤波处理,并将结果点云赋值给选中的点云对象。文件并点击 “打开”。

2301_79331387的博客 283

Spring基于Xml注入bean的几种方式

spring中的依赖注入 依赖注入: Dependency Injection IOC的作用: 降低程序间的耦合(依赖关系) 依赖关系的管理: 以后都交给spring来维护,在当前类需要用到其他类的对象,由spring为我们提供, 我们只需要在配置文 件中说明 依赖关系的维护: 就称之为依赖注入。 能注入的数据:有三类 基本类型和String 其他bean类型(在配置文件...

java_fight的博客 1万+

Spec Kit:GitHub 官方推出的规范驱动开发工具包,让 AI 编程真正可控、高效、高质量

先明确“做什么”和“为什么”,再考虑“如何做”。它通过一系列标准化命令(如/specify/plan/implement可验证的功能规格(spec)可执行的技术方案(plan)可追溯的开发任务(tasks)高质量的实现代码(code)最终实现“规范即代码,代码即规范”的闭环。📌项目地址许可证:MIT(完全开源,欢迎贡献)Spec Kit 代表了 GitHub 对AI 原生开发(AI-Native Development)AI 不应替代开发者,而应放大开发者的意图。

lpfasd123的博客 1712

Spring 注入bean的几种方式

Spring框架支持多种方式进行Bean的注入,以满足不同场景的需求。@Autowired@Resource以上是一些常见的Spring Bean注入方式,选择适当的方式取决于具体的业务需求和设计考虑。构造器注入和Setter注入是最常见的两种方式,而其他方式在一些特殊情况下可能更为适用。

tanwu1的博客 2777

【华为OD机试】真题E卷-一种字符串压缩表示的解压(C++)

有一种简易压缩算法:针对全部为小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串aaabbccccd 经过压缩变成字符串 3abb4cd请您编写解压函数,根据输入的字符串, 判断其是否为合法压缩过的字符串若输入合法则输出解压缩后的字符串 否则输出字符串!error来报告错误。

u014481728的博客 894

【RT-DETR创新改进】改进前必看!对Ultralytics调参, 1:1还原RT-DETR官方版本实验参数,使用原汁原味的RT-DETR模型,才能高效跑实验、高效涨点、收割小论文、完成大论文!!!

本文针对Ultralytics训练RT-DETR精度不佳问题,提供参数配置优化方案。通过对比官方RT-DETR参数设置,详细指导如何修改Ultralytics版本的关键参数,包括优化器、学习率、权重衰减等6处配置调整。操作步骤涵盖default.yaml文件修改和trainer.py代码调整,确保模型收敛性能达到官方水平,帮助研究者快速提升实验效果。文末附官方源码链接和具体参数配置网址供参考。

Ai缝合怪、助力小伙伴高效发论文 1780

Spring基于xml注入bean的几种方式

Spring基于xml注入bean的几种方式

我从不打没有准备的仗! 9752

【SpringBoot 4.x 第2节】夯爆了,学习 Spring Boot 4.x 前,需要具备哪些 Java 基础?

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 4569

Spring构造注入的几种方式

spring构造器注入案例

weixin_52937170的博客 1985

【工程师一次性讲明白系列】什么是电压驻波比 (VSWR)

电压驻波比(VSWR)是电信号传输过程中非常重要的指标,控制VSWR的大小可以提高信号传输效率和系统稳定性。通过优化阻抗匹配,可以有效地减少反射信号,提升通信质量!🚀📡。

weixin_43199439的博客 1300

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

一文道破将bean注入到Spring中的几种方式

前两天有学妹问我如何将bean注入到Spring中,虽问题较简单,但还是写此文以告之。在Java的Spring框架中,将bean注入到容器中是核心概念之一,这是实现依赖注入的基础。Spring提供了多种方式来将bean注入到容器中。写此文,同时也希望这篇文章能帮助到各位路过的大佬。

小威的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring 中注入 Bean 有几种方式?

Spring 是 Java 后端开发的基石框架,而IOC(控制反转)与 DI(依赖注入)是其核心思想。掌握 Bean 的注入方式,不仅是面试中的高频点,更能体现候选人对框架底层设计的理解。面试官常通过 Bean 注入问题,判断你对 Spring 框架的掌握是否停留在“能用”,还是已经达到“知其然,知其所以然”的阶段。Spring 中 Bean 注入方式虽是基础知识,却常在面试中作为“深挖点”出现。候选人若能在回答中体现出清晰的逻辑、扎实的实战经验与框架理解能力,将极大加分。

残影的博客 918

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Statistics and Machine Learning Toolbox

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

Spring注入bean的几种方式

可以在配置类中使用 @ComponentScan 注解来自动扫描指定包下的所有 @Component,@Service,@Repository,和 @Controller 注解的Bean。在上面的配置中,Spring会自动将名为 engine 的 Engine Bean 注入到 Car Bean 中的 engine 属性,因为它们的类型匹配。在Spring中,通过XML配置文件来注入Bean的方式主要包括以下几种:构造器注入、Setter注入、接口注入和集合注入。构造器注入是通过构造函数来注入依赖的。

刘皇叔说Java的博客 2570

【Spring】依赖注入的几种方式

Spring依赖注入的几种方式详细实现及其优缺点分析

qq_43418737的博客 3343
上一篇: Spring事务隔离机制
下一篇: cmd:不是内部或者外部命令,也不是可运行的程序或批处理文件解决方法
白衣染霜陈
博客等级 码龄22年 682粉丝 338原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值