Spring学习之(三)Spring中的参数注入
本文档为学习笔记,水平有限,请各位看官仔细甄别;BUG写错了,可不要怪我呦,哈哈哈
1、注入基本值
注入基本值<value/>元素,也可以通过value属性来实现
1.1、使用<value/>元素注入基本值
<value/>元素可以通过字符串指定属性或构造器参数的值。Spring容器将字符串从
java.lang.String
类型转换为实际的属性或参数类型后给Bean
对象注入
- 如下配置示例:
<!-- 使用<value/> 元素注入基本值 -->
<bean id="student" class="com.ohmygod.entity.StudentInfo">
<property name="studNo">
<value>1001</value>
</property>
<property name="studName">
<value>张三</value>
</property>
</bean>
1.2、使用value属性注入基本值
也可以使用value属性指定基本值
- 如下配置示例:
<!-- 使用value属性注入基本值 -->
<bean id="studentInfo" class="com.ohmygod.entity.StudentInfo">
<property name="studNo" value="1002"></property>
<property name="studName" value="李四"></property>
</bean>
2、注入Bean对象
我们注入Bean对象的方式有两种,一种是内部Bean,另一种是外部Bean;
2.1、注入内部Bean
- 注入内部Bean的示例如下:
<!-- 注入内部Bean -->
<bean id="studentInfoService" class="com.ohmygod.service.StudentInfoService">
<property name="studentInfoDao">
<bean class="com.ohmygod.dao.OracleStudentInfoDao"></bean>
</property>
</bean>
2.2、注入外部Bean
注入外部Bean,首先要声明这个外部的Bean,然后我们的属性直接进行引用即可
- 注入外部的Bean,代码示例如下:
<!-- 注入外部Bean -->
<bean id="studentInfoServiceObject" class="com.ohmygod.service.StudentInfoService">
<property name="studentInfoDao" ref="oracleStudentInfoDao"></property>
</bean>
<!-- 声明的bean,方便重复引用 -->
<bean id="oracleStudentInfoDao" class="com.ohmygod.dao.OracleStudentInfoDao"></bean>
3、注入集合
注入集合包含:List、Set、Map及Properties配置文件,可以分别通过<list/>、<set/>、<map/>以及<props/>元素来实现,下面进行分别的介绍
3.1、list元素注入
- 配置代码如下示例:
<!-- 一个实例辣妹对象,露丝 -->
<bean id="rose" class="com.ohmygod.entity.HotGirlObjectBean">
<!-- list注入 -->
<property name="books">
<list>
<value>三国演义</value>
<value>水浒传</value>
<value>红楼梦</value>
<value>西游记</value>
</list>
</property>
</bean>
3.2、set元素注入
- 配置代码如下示例:
<property name="homeMates">
<set>
<value>西施</value>
<value>杨玉环</value>
<value>王昭君</value>
<value>貂蝉</value>
</set>
</property>
3.3、map元素注入
- 配置代码如下示例:
<!-- map注入 -->
<property name="subject">
<map>
<entry key="10001" value="演员的自我修养"></entry>
<entry key="10002" value="Java从入门到放弃"></entry>
<entry key="10003" value="Mysql删库跑路"></entry>
</map>
</property>
3.4、properties集合注入
- 配置示例代码如下:
<!-- props注入 -->
<property name="baseInfo">
<props>
<prop key="name">Rose</prop>
<prop key="sex">F</prop>
<prop key="high">172</prop>
<prop key="weight">52kg</prop>
</props>
</property>
3.5、集合元素的引用方式注入
spring对如上的几种集合元素,也支持引入的方式进行注入,需要在Spring的容器中
<util:list/>
、<util:set/>
等进行声明。这里额外说明一下,若要使用
util
这个标签,需要在applicationContext.xml
文件中引入相关的schema,添加如下:
xmlns:util="http://www.springframework.org/schema/util"
以及:
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
- 示例:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
</beans>
- 集合元素的引用注入示例:
<!-- 集合元素的引用方式注入 -->
<util:list id="books">
<value>西厢记</value>
<value>史记</value>
<value>资治通鉴</value>
<value>二十四史</value>
</util:list>
<util:set id="homeMates">
<value></value>
<value></value>
<value></value>
</util:set>
<util:map id="subject">
<entry key="20001" value="古代史"></entry>
<entry key="20002" value="近代史"></entry>
<entry key="20003" value="现代史"></entry>
</util:map>
<util:properties id="baseInfo">
<prop key="name">Marry</prop>
<prop key="sex">F</prop>
<prop key="high">170</prop>
<prop key="weight">50kg</prop>
</util:properties>
<!-- 这里声明一个Marry美女老师 -->
<bean id="Marry" class="com.ohmygod.entity.HotGirlObjectBean">
<property name="books" ref="books"></property>
<property name="homeMates" ref="homeMates"></property>
<property name="subject" ref="subject"></property>
<property name="baseInfo" ref="baseInfo"></property>
</bean>
-
HotGirlObjectBean
的完整代码如下:
package com.ohmygod.entity;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
/**
* 辣妹子
*
* @author zhang_wei
*
*/
public class HotGirlObjectBean {
/**
* 喜欢读的书
*/
private List<String> books;
/**
* 室友
*/
private Set<String> homeMates;
/**
* 上学的课程
*/
private Map<String,String> subject;
/**
* 辣妹的基本信息
*/
private Properties baseInfo;
public List<String> getBooks() {
return books;
}
public void setBooks(List<String> books) {
this.books = books;
}
public Set<String> getHomeMates() {
return homeMates;
}
public void setHomeMates(Set<String> homeMates) {
this.homeMates = homeMates;
}
public Map<String, String> getSubject() {
return subject;
}
public void setSubject(Map<String, String> subject) {
this.subject = subject;
}
public Properties getBaseInfo() {
return baseInfo;
}
public void setBaseInfo(Properties baseInfo) {
this.baseInfo = baseInfo;
}
@Override
public String toString() {
return "HotGirlObjectBean [books=" + books + ", homeMates=" + homeMates
+ ", subject=" + subject + ", baseInfo=" + baseInfo + "]";
}
}
4、注入Spring的表达式
Spring引入了一种表达式语言,这和统一的EL在语法上很相似,这种表达式语言可以用于定义基于XML的注解配置的Bean;
如下示例注入一个properties文件
- phone.properties文件
type=iPhone 11
color=White
memory=256G
money=10998
- 代码配置如下:
<!-- 引入一个properties文件 -->
<util:properties id="phone" location="classpath:config/phone.properties"></util:properties>
<bean id="myPhone" class="com.ohmygod.entity.Phone">
<!-- 这里使用spring中的表达式进行注入,直接取的是properties文件中的对应key指向的value值 -->
<property name="type" value="#{phone.type}"></property>
<property name="color" value="#{phone.color}"></property>
<property name="memory" value="#{phone.memory}"></property>
<property name="money" value="#{phone.money}"></property>
</bean>
5、注入null或者空字符串
Spring中,将空的参数当作空String
如果需要注入null值,则可以使用
<null/>
元素
- 代码示例如下:
<!-- 坏了的phone -->
<bean id="badPhone" class="com.ohmygod.entity.Phone">
<!-- 注入空白字符串 -->
<property name="type" value=""></property>
<!-- 注入null -->
<property name="money">
<null />
</property>
</bean>