欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring——依赖注入杂记

程序员文章站 2024-03-24 14:43:40
...

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

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

 不用使用<constructor -arg />

2、按照下标进行构造

Spring——依赖注入杂记

3、通过类型匹配来构造

Spring——依赖注入杂记

4、通过变量名直接使用

Spring——依赖注入杂记

二、 xml配置详解

1、 alias别名:

Spring——依赖注入杂记

2、 bean配置:

Spring——依赖注入杂记

3、 import配置:

导入其他的配置文件xml。如果内容重名且类型重复,会被自动合并。一般用于团队开发使用,多人开发合并成一个配置文件进行操作。
Spring——依赖注入杂记

三、 依赖注入

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

1、 构造器注入

2、 set注入【重点】

(1) 普通类型直接注入:
Spring——依赖注入杂记

(2) 引用类型,bean注入:
Spring——依赖注入杂记

(3) 数组注入:
Spring——依赖注入杂记

(4) List注入:
Spring——依赖注入杂记

(5) map注入:【entry结构】
Spring——依赖注入杂记

(6) set注入:

Spring——依赖注入杂记

(7) null值注入:
可以设置为空值或者null;
设置空串
Spring——依赖注入杂记

设置为null
Spring——依赖注入杂记

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

Spring——依赖注入杂记

3、 特殊注入方式:

p命名空间注入:可以直接注入属性的值,对应set方法的属性注入(必须有无参构造函数)
c命名空间注入:使用构造方法注入(必须有有参构造方法)
Spring——依赖注入杂记

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

四、 bean的作用域:bean scopes

Spring——依赖注入杂记

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

1、 单例模式:

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

2、 原型模式:

设置为prototype,每次使用getbean都会产生新对象
Spring——依赖注入杂记

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

五、 Bean自动装配

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

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

Spring——依赖注入杂记

(1) 通过name装配:
会自动查找和自己对象set方法后面的值对应的。
Spring——依赖注入杂记

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

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

这种type方式甚至可以连id都省略Spring——依赖注入杂记

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

o 导入约束(context约束)
o 配置注解的支持,加入context:annotation-config/
Spring——依赖注入杂记

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

Spring——依赖注入杂记

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

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

与Java中的注解@Nullable类似的作用
public Person(@Nullable String name){…}
Spring——依赖注入杂记Spring——依赖注入杂记

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

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

Spring——依赖注入杂记

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

Spring——依赖注入杂记