Spring——依赖注入杂记

本文深入探讨了Spring框架中的对象构造方法IOC创建的四种方式,包括无参构造、按下标、类型匹配和变量名直接使用。接着详细阐述了XML配置,如别名、bean配置和导入。依赖注入方面,介绍了构造器注入、set注入的各种形式,以及特殊注入方式如p和c命名空间注入。此外,还讲解了bean的四种作用域和自动装配机制,包括name和type装配,以及注解@Autowired和@Resource的使用。文章旨在帮助读者理解Spring的核心概念和实践技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 对象构造方法IOC创建的方式

1、默认使用无参构造方法

 不用使用<constructor -arg />

2、按照下标进行构造

在这里插入图片描述

3、通过类型匹配来构造

在这里插入图片描述

4、通过变量名直接使用

在这里插入图片描述

二、 xml配置详解

1、 alias别名:

在这里插入图片描述

2、 bean配置:

在这里插入图片描述

3、 import配置:

导入其他的配置文件xml。如果内容重名且类型重复,会被自动合并。一般用于团队开发使用,多人开发合并成一个配置文件进行操作。
在这里插入图片描述

三、 依赖注入

依赖:bean对象的创建依赖于容器
注入:bean对象中所有属性,由容器来注入

1、 构造器注入

2、 set注入【重点】

(1) 普通类型直接注入:
在这里插入图片描述

(2) 引用类型,bean注入:
在这里插入图片描述

(3) 数组注入:
在这里插入图片描述

(4) List注入:
在这里插入图片描述

(5) map注入:【entry结构】
在这里插入图片描述

(6) set注入:

在这里插入图片描述

(7) null值注入:
可以设置为空值或者null;
设置空串
在这里插入图片描述

设置为null
在这里插入图片描述

(8) property配置类注入:
使用props设置键值对,值在尖括号中间,比如配置数据库信息

在这里插入图片描述

3、 特殊注入方式:

p命名空间注入:可以直接注入属性的值,对应set方法的属性注入(必须有无参构造函数)
c命名空间注入:使用构造方法注入(必须有有参构造方法)
在这里插入图片描述

注意:p和c都需要导入xml约束。

四、 bean的作用域:bean scopes

在这里插入图片描述

四种作用域:显式设置是在设置bean的时候加上scopes,不设置就是单例模式

1、 单例模式:

默认为singleton,全局都是一个对象,即使多个getbean也是同一个对象的实例。

2、 原型模式:

设置为prototype,每次使用getbean都会产生新对象
在这里插入图片描述

其余的几种都是必须在web中才可以使用的。

五、 Bean自动装配

自动装配是Spring满足bean依赖的一种方式
Spring会在上下文中自动寻找,并自动给bean装配属性
在Spring中有三种装配的方式:
• xml显式的装配(上文)
• Java中显式装配
• 隐式的自动装配bean

1、 使用bean的autowire,细分以下几种方式:

在这里插入图片描述

(1) 通过name装配:
会自动查找和自己对象set方法后面的值对应的。
在这里插入图片描述

这里的People类有两个属性,一个是cat一个是dog,且分别有对应的set方法,然后在配置文件中有两个bean,分别是cat和dog,不过因为dog的名字不对应setdog,所以这里只有cat可以被自动装配。
(2) 通过type装配:在这里插入图片描述

会自动在上下文中查找和自己对象属性类型一致的bean。可以解决名字不匹配的情况,但是会出现新的问题,就是如果同时定义两个同类的bean,就会报错。

这种type方式甚至可以连id都省略在这里插入图片描述

2、 使用注解实现自动装配

o 导入约束(context约束)
o 配置注解的支持,加入context:annotation-config/
在这里插入图片描述

(1) 通过注解导入需要在类属性上加入@Aotuwired注解

在这里插入图片描述

    另一个好处:这种方式可以不在类中加入set方法,因为注解是通过反射的原理实现注入的。前提是自动装配的属性在IOC(Spring)容器中存在,且符合Byname或者Bytype。

注解后面可以跟一个required属性(布尔类型),表示可以为空值null

与Java中的注解@Nullable类似的作用
public Person(@Nullable String name){…}
在这里插入图片描述在这里插入图片描述

如果在xml配置文件中,有相同类的bean,或者名字不满足,那么可以使用@Qualifier(“指定id”)注解,进行指定匹配。

(2) (Java的原生注解):@Resource
这个注解可以自动通过名字和类型去匹配。如果名字和类型都不匹配才会报错(比较高级),而且因为是Java原生包,在不导入Spring包的情况下也可以使用。

在这里插入图片描述

而且这个注解可以直接指定名字进行匹配:无需再使用@Qualifier

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值