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>