此博客为学习笔记,记录下来怕自己后面学着学着忘记了。 CSDN内容同步更新,id同名,本文csdn链接
在上两篇文章中记录了Spring Bean中的配置属性+实例化+作用域+生命周期,此文将Spring Bean的补充Bean装配方式。
这是上两篇链接:
Spring5基础(3)——Spring Bean(配置属性+实例化+作用域)
Spring5基础(4)——Spring Bean(生命周期)
Spring Bean装配方式
Spring Bean装配即将Bean类依赖注入到Spring IoC容器中,Spring Bean装配方式即Bean的依赖注入方式。
Bean的装配方式主要有以下三种:
- 基于xml配置文件的装配方式
- 基于注解的装配方式
- 自动装配
前两种是最主流的装配方式。
一.使用xml配置文件装配
之前在
Spring5基础(2)——Spring IoC控制反转(基础)
Spring5基础(3)——Spring Bean(配置属性+实例化+作用域)
中都有相关的例子。
这种装配方式分为两种:①使用构造方法注入 ②使用属性setter方法注入
由于之前在Spring5基础(3)——Spring Bean(配置属性+实例化+作用域)一文中有几个bean下的四个子元素没有尝试过(< list >、< map >、< set >、< enty >这四个子元素),所以这里还是尝试写个栗子试试,对同一个类使用构造方法和属性setter方法注入两次。
对于属性setter注入:需提供无参构造和属性set方法
当然竟然涉及到list ,map 和 set。就顺便找了几篇博客复习一下:
java中Map,List与Set的区别
package com.lipiao.demo;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class D {
private String name;
private String[] strings;//数组
private List<String> stringList;//列表
private Map<String, String> stringStringMap;//映射
private Set<String> stringSet;//集合
//构造方法注入
public D(String name, String[] strings, List<String> stringList,
Map<String, String> stringStringMap, Set<String> stringSet) {
this.name = name;
this.strings = strings;
this.stringList = stringList;
this.stringStringMap = stringStringMap;
this.stringSet = stringSet;
}
//属性setter注入:需提供无参构造和属性set方法
public D() {
}
public void setName(String name) {
this.name = name;
}
public void setStrings(String[] strings) {
this.strings = strings;
}
public void setStringList(List<String> stringList) {
this.stringList = stringList;
}
public void setStringStringMap(Map<String, String> stringStringMap) {
this.stringStringMap = stringStringMap;
}
public void setStringSet(Set<String> stringSet) {
this.stringSet = stringSet;
}
}
<!-- 构造注入-->
<bean id="D1" class="com.lipiao.demo.D">
</bean>
**首先使用构造方法注入:88
填写完bean类的基本信息之后按下快捷键alt+enter,选择第一个,IDEA便会自动根据bean类进行内容补全,如下所示:
快捷注入
自动补全如下:< list >、< map >、< set >、< enty >这四个子元素的使用也就一目了然了。
<!-- 构造注入-->
<bean id="D1" class="com.lipiao.demo.D">
<constructor-arg index="0" value=""/>
<constructor-arg index="1">
<list>
<value></value>
</list>
</constructor-arg>
<constructor-arg index="2">
<list>
<value></value>
</list>
</constructor-arg>
<constructor-arg index="3">
<map>
<entry key="" value=""/>
</map>
</constructor-arg>
<constructor-arg index="4">
<set>
<value></value>
</set>
</constructor-arg>
</bean>
这样就能直接填写初始数据就好啦。
<!-- 构造注入-->
<bean id="D1" class="com.lipiao.demo.D">
<constructor-arg index="0" value="构造方法注入name"/>
<constructor-arg index="1">
<list>
<value>构造方法注入strings元素一</value>
<value>构造方法注入strings元素二</value>
</list>
</constructor-arg>
<constructor-arg index="2">
<list>
<value>构造方法注入stringList元素一</value>
<value>构造方法注入stringList元素二</value>
</list>
</constructor-arg>
<constructor-arg index="3">
<map>
<entry key="element1" value="构造方法注入stringStringMap元素一"/>
<entry key="element2" value="构造方法注入stringStringMap元素二"/>
</map>
</constructor-arg>
<constructor-arg index="4">
<set>
<value>构造方法注入stringSet元素一</value>
<value>构造方法注入stringSet元素二</value>
</set>
</constructor-arg>
</bean>
接下来看看setter属性注入:
同样是上边的D类,已经为所有属性都写了setter方法。
对于属性setter注入:需提供无参构造和属性set方法
xml中使用< property > 元素为变量提供初始值,如下所示:
<!--属性setter注入-->
<bean id="D2" class="com.lipiao.demo.D">
<property name="name" value="属性setter注入name"/>
<property name="strings">
<array>
<value>属性setter注入strings元素一</value>
<value>属性setter注入strings元素二</value>
</array>
</property>
<property name="stringList">
<list>
<value>属性setter注入stringList元素一</value>
<value>属性setter注入stringList元素二</value>
</list>
</property>
<property name="stringStringMap">
<map>
<entry key="element1" value="属性setter注入stringStringMap元素一"/>
<entry key="element2" value="属性setter注入stringStringMap元素二"/>
</map>
</property>
<property name="stringSet">
<set>
<value>构造方法注入stringSet元素一</value>
<value>构造方法注入stringSet元素二</value>
</set>
</property>
</bean>
当有大量的Bean需要注入时,使用xml配置文件装配难免会将xml文件写的很长,难于后期维护。
这时更推荐使用注解装配。
下一篇文章将记录注解装配的学习笔记与编程案例。
网友评论