当前位置:网站首页>依赖注入(DI),自动配置,集合注入
依赖注入(DI),自动配置,集合注入
2022-08-03 06:34:00 【bobo洁厕灵】
向一个类中传入数据有两种方式,普通方法(set),构造器。
DI是描述容器中bean与bean之间依赖关系的过程,bean运行需要的数据有两种类型:引用类型,简单类型
Spring提供两种注入方式
setter注入
构造器注入
两种注入方式又因为注入数据不同分为两种,简单类型数据,引用类型数据
就是运行类不需要自己声明对象,在容器中寻找到bean提取出来,注入到运行类中,减少耦合
setter注入
首先在在对象中注入对象类型
声明对象属性
在对象中生成对象的setter方法
在配置文件中添加配置
以上是引用类型的注入
简单数据类型的注入怎么实现
1.声明简单类型的属性,并提供相应的setter方法
2.配置文件添加配置
添加property标签,注意简单类型的路径换成value了,和引用类型的ref不同
对于setter注入方式的基本使用就已经介绍完了,
对于引用数据类型使用的是
<property name="" ref=""/>
对于简单数据类型使用的是
<property name="" value=""/>
构造器注入
1.删除setter方法并提供带有参数的构造方法(constructor)(多个参数时也可以)
2.配置文件中配置构造器注入
constructor-arg标签对应了构造器方法的名称constructor
name表示构造器中形参的值,必须保持一致
ref表示容器中对应的其他bean的值
以上是引用类型的注入,简单类型数据怎么注入呢
1.声明简单数据,并生成带有参数的构造器
2.配置完成多个属性构造器注入
反思:若是构造器中参数名发生变化,配置文件中的name值也要发生变化,这是一个耦合,如何消除
方式一:删除name属性,添加type属性,按照类型注入
方式二:删除type属性,添加index属性,按照索引下标注入,下标从0开始
自动配置(重点在setter方法)
自动配置,顾名思义就是将注入时在配置文件中的自动完成,不需要手动配置注入相关语句
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
1.将配置文件中的property标签删除,添加autowire属性
一般选择按类型自动装配
2.需要注入属性的类中的对应属性的setter方法不能省略
3.被注入的对象必须被Spring的IoC容器管理
当实现类的bean对象被获取后,在bean对象中的属性有setter方法的会被自动装配,此时会按照实现类的setter方法提供的数据类型去Spring的IoC容器中寻找被注入的对象,寻找类型主要看bean的class属性,因为class对应数据的类型
4.按照类型在Spring的IoC容器中如果找到多个对象,会报错NoUniqueBeanDefinitionException
存在两个bean的class一致,那么按照类型寻找的被注入对象就会存在多个,此时就会报错
怎么解决同一类型的不确定bean造成的报错呢
使用byName装配
注意此时寻找被注入对象仍然是按照setter方法提供的数据来实现的
按照类型注入使用的次数更多一点
集合注入
集合中既可以装简单数据类型也可以装引用数据类型,对于集合,在Spring中该如何注入呢?
常见的集合类型:数组,List,Set,Map,Properties
使用setter注入方式
修改实现类的属性和set方法
public class BookDaoImpl implements BookDao {
private int[] array;
private List<String> list;
private Set<String> set;
private Map<String,String> map;
private Properties properties;
public void setArray(int[] array) {
this.array = array;
}
public void setList(List<String> list) {
this.list = list;
}
public void setSet(Set<String> set) {
this.set = set;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public void save() {
System.out.println("book dao save ...");
System.out.println("遍历数组:" + Arrays.toString(array));
System.out.println("遍历List" + list);
System.out.println("遍历Set" + set);
System.out.println("遍历Map" + map);
System.out.println("遍历Properties" + properties);
}
}
修改配置文件
边栏推荐
猜你喜欢
qt学习之旅--MinGW32编译opencv3.0.0
【多线程进阶】--- 常见锁策略,CAS,synchronized底层工作原理,JUC,线程安全的集合类,死锁
Data warehouse buried point system and attribution practice
分布式数据库数据一致性的原理、与技术实现方案
MySQL - 触发器
10 分钟彻底理解 Redis 的持久化和主从复制
postman将接口返回结果生成csv文件到本地
解决登录vCenter提示“当前网站安全证书不受信任“
开放域OOD主要数据集、评价指标汇总
【着色器实现HandDrawn简笔画抖动效果_Shader效果第十二篇】
随机推荐
【多线程进阶】--- 常见锁策略,CAS,synchronized底层工作原理,JUC,线程安全的集合类,死锁
用代码构建UI界面
【playwright】pytest-playwright增加代理服务选项
Getting Started with Chrome Plugin Development
[机缘参悟-59]:《素书》-6-安于礼仪[安礼章第六]
Flink的Exactly-Once、状态机制、watermark机制
戳Web3的神话?戳到铁板。
【Shell】3万字图文讲解带你快速掌握shell脚本编程
MySQL日期和时间戳的转换
多线程打印ABC(继承+进阶)
CISP-PTE Zhenti Demonstration
Basic syntax of MySQL DDL and DML and DQL
关于任命韩文弢博士代理NOI科学委员会主席的公告
数据仓库指标体系实践
postman将接口返回结果生成csv文件到本地
Embedding two implementations of the torch code
信息学奥赛一本通T1451:棋盘游戏
解决登录vCenter提示“当前网站安全证书不受信任“
tmp
pt-online-schema-change工具使用的一次