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

Fritzing0.9.10下载安装和简单使用

Fritzing 作为一款电子设计自动化软件,其画图用于导入到论文和文档,清晰好看,能解决用相机拍实物照片杜邦线很乱的痛点。

李同学Lino的博客 3万+

spring的注入bean的几种方式

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

岁月无痕的博客 1万+

基于aarch64分析kernel源码 六:kernel_init进程(1号进程)、kthreadd进程(2号进程)

kernel_init进程(1号进程)、kthreadd进程(2号进程)分析

OnlyLove_的博客 764

IEC103协议实战指南:报文解析与传输优化策略

本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。

r2s3t4的博客 541

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

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

java_fight的博客 1万+

Vue集成天地图:从定位到交互绘图的完整实践指南

本文详细介绍了如何在Vue项目中集成天地图API,从基础配置到高级功能实现,包括定位、标点、画线等交互绘图功能。通过实战代码示例和性能优化技巧,帮助开发者快速掌握Vue与天地图的结合应用,提升地图开发效率。

weixin_29013129的博客 248

Spring 注入bean的几种方式

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

tanwu1的博客 2777

环境配置 |Jupyter lab/Jupyter Notebook 安装与设置

ipynb使用Jupyterlab/Jupyter Notebook 来编写程序时的文件,在使用时,可以现转换为标准的.py的python文件。

weixin_44649780的博客 5773

【电容/电感】电路板会“滋滋”的响,我们称它为啸叫

一、啸叫的起源 大部分硬件工程师应该都遇到过,PCBA上电后出现“滋滋滋”的叫声,其声响或大或小,或时有时无,或深沉或刺耳,或变化无常者皆有。该现象我们称为“啸叫”,一般分为电感啸叫和电容啸叫。

云轩阁 6万+

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

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

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

lammps案例:聚乙烯和石墨烯界面pull out模拟

大家好,我是小马老师。 本文介绍lammps模拟计算界面结合力的一个案例。 本案例参考论文《The interfacial mechanical properties of functionalized graphene- polymer nanocomposites》,对论文作者表示感谢。 模型共分2层,上层为聚乙烯模型,下次为单层石墨烯,模拟过程共分3部分:建模、弛豫、拉伸。 (1)建模 使用MS建立聚乙烯和石墨烯模型,具体方法可参考之前的推文,使用build layer方法建立聚乙烯和石墨烯组合模型,

lammps_jiayou的博客 3495

Spring构造注入的几种方式

spring构造器注入案例

weixin_52937170的博客 1985

【项目实战】YOLOV5 +实时吸烟目标检测+手把手教学+开源全部

本原创项目长期更新,旨在完成校园异常行为实时精检测,做到集成+N次开发+优化(不止局限于调包)为止,近期将不断更新以下模型+数据+标注文件+教程。关注博主,Star 一下github,一起开始美妙的目标检测之路吧~~ 文章目录本原创项目长期更新,旨在完成校园异常行为实时精检测,做到集成+N次开发+优化(不止局限于调包)为止,近期将不断更新以下模型+数据+标注文件+教程。关注博主,Star 一下github,一起开始美妙的目标检测之路吧~~一、项目展示二、项目资源共享1:训练图片:香烟图片+吸烟手势+烟雾三、

cv君的博客 13万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

小威的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Spring 中注入 Bean 有几种方式?

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

残影的博客 918

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

余额充值