【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万+

香橙派5使用RK3588S内置NPU加速yolov5推理,实时识别数字达到50fps

香橙派5采用了RK3588S,内置的NPU达到了6Tops的算力,博主这里记录一下自己的踩坑过程,好不容易做出来的不能以后忘记了(手动狗头)。这里博主还在B站上发布了效果视频,大家感兴趣的话可以看一下。其中解决了先验框标注位置不对,或者出现非常多的框的问题

weixin_51651698的博客 2万+

spring的注入bean的几种方式

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

岁月无痕的博客 1万+

学习海康VisionMaster之顶点检测

2:应用场景:海康VisionMaster的顶点检测功能在工业视觉检测中具有广泛的应用场景,尤其在精密制造、电子元件检测和机械加工等领域,其通过高精度定位物体的关键点(如角点、交点或边缘顶点)来实现自动化测量与质量控制。基本参数这里就是画ROI,设定跟踪参数和之前的工具是一样的方法,这里画的方向需要注意,如下图所示,边缘的扫描方向正好对应需要查找的边缘点。一个不是很规则的物体需要检测一个凸台的顶角坐标,其实靠边缘与边缘交点是不太稳定的,如下图所示,边缘很短,很容易产生误抓边缘。1:什么是顶点检测?

yuhouxiyang的专栏 1524

XGBoost调参新姿势:Bayesian优化实战指南(附完整代码)

本文详细介绍了如何使用Bayesian优化方法高效调优XGBoost模型参数。通过解析Bayesian优化核心原理和XGBoost关键参数,提供完整的实战代码示例,帮助读者掌握这一智能调参技术,显著提升模型性能。文章特别适合机器学习工程师和数据科学家阅读。

weixin_42536058的博客 366

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

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

java_fight的博客 1万+

10万+字超硬核 机器学习 笔记(面试八股)

10w字总结面试中可能用到的机器学习八股和常用算法,包括感知机(Perceptron)、多层感知机(MLP, Multi-Layer Perceptron)、支持向量机(SVM, Support Vector Machine)、K 最近邻(KNN, K-Nearest Neighbors)、朴素贝叶斯(Naive Bayes)、决策树(Decision Tree)、随机森林(Random Forest)、Bagging、Boosting、GBDT、XGBoos、LightGBM等。

haopinglianlian的博客 4658

Spring 注入bean的几种方式

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

tanwu1的博客 2777

Spring AI Alibaba实战训练营-16 NL2SQL (自然语言转 SQL)应用开发指南

本文介绍了一个基于AI的智能BI应用开发项目,主要实现自然语言转SQL(NL2SQL)功能,包含对话模块、MCP模块、向量数据管理模块。项目采用Spring AI Alibaba框架,集成通义千问大模型,支持内存向量库和AnalyticDB向量数据库两种存储方案。重点展示了chat模块的三个控制器实现:AnalyticNl2SqlController用于生产环境,SimpleChatController适用于开发测试,Nl2sqlForGraphController支持基于图的复杂对话流程。系统通过将业务知

program哲学 1587

17、激光切割质量影响因素及优化研究

本文研究了激光切割过程中焦点位置、入射角、激光功率、切割速度和气体压力等因素对切割质量的影响,采用响应面方法(RSM)和Box-Behnken设计,基于三种不同喷嘴对SS 304不锈钢进行实验。通过建立切缝宽度比和条纹深度的回归模型,并结合方差分析验证模型有效性,深入分析各参数对切割质量的影响机制。研究发现喷嘴结构差异显著影响参数作用趋势,尤其在切割速度和气体压力响应上表现明显。最终通过多目标优化确定最小激光功率、适中切割速度和最大气体压力为最优组合,显著提升切割质量,为实际生产提供了理论依据和技术支持。未

grape的博客 131

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

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

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

图神经网络与大模型融合的理论综述:架构、机制与未来方向

然而,它们普遍缺乏对图结构数据的原生支持,无法直接处理边、节点之间的拓扑关系,这限制了其在关系密集型任务中的表现 [23]。2020年发布的BERT [16] 开启了自监督预训练时代,而2021年后,T5 [17]、PaLM [18]、LLaMA [19] 等模型相继推出,参数规模突破千亿级,展现出惊人的上下文学习(In-context Learning)与链式推理(Chain-of-Thought)能力 [20]。例如,将医学影像作为图节点,结合病理报告文本,实现更精准的疾病诊断 [58]。

andeyeluguo的博客 295

Spring构造注入的几种方式

spring构造器注入案例

weixin_52937170的博客 1985

基于单片机设计的智能消防排烟窗控制系统_422

随着城市化进程的不断加快,高层建筑、大型商业综合体以及地下空间的数量迅速增加,建筑内部结构日趋复杂,一旦发生火灾,烟雾和有毒气体往往比明火更具威胁性。大量研究表明,在火灾事故中,人员伤亡的主要原因并非直接烧伤,而是由于吸入烟雾及一氧化碳等有毒气体导致窒息。因此,如何在火灾初期快速排烟、降低有害气体浓度,并及时进行预警,成为现代消防系统设计中的关键问题。传统的消防排烟系统多依赖人工操作或简单的联动控制方式,存在响应滞后、自动化程度低、信息反馈不及时等问题。在实际应用中,当火灾发生时,如果不能第一时间开启排烟窗

396

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

小威的博客 1万+

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

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

Spring 中注入 Bean 有几种方式?

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

残影的博客 918

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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、付费专栏及课程。

余额充值