1. 程式人生 > >Spring中Bean的複雜屬性注入

Spring中Bean的複雜屬性注入

1.物件屬性

2.名稱空間

3.SpEL

4.集合屬性注入

-----------------------------------------------------------------------------------------------------------------

假設有兩個類,1.Person類  屬性有 人名,車

                            2.Car2類  屬性有  車名,價格

Person類:

package cn.nedu.wy.demo05;

public class Person {
	private String name;  //人名字
	private Car2 car2;    //這個人的車
	public void setName(String name) {
		this.name = name;
	}
	public void setCar2(Car2 car2) {
		this.car2 = car2;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", car2=" + car2 + "]";
	}
		
}
Car2類:
package cn.nedu.wy.demo05;

public class Car2 {
	private String name;
	private Double price;

	public void setName(String name) {
		this.name = name;
	}
	public void setPrice(Double price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Car2 [name=" + name + ", price=" + price + "]";
	}
	
}


-----------------------------------------------------------------------------------------------------------------

1.物件屬性:

ref=“id名”

配置檔案:

        <bean id="person" class="cn.nedu.wy.demo05.Person">
		<property name="name" value="小躍哥" />
		<property name="car2" ref="car2"></property>
	</bean>

測試物件屬性注入:
	@Test
	public void demo03(){
		ApplicationContext applicationContext = new 
				ClassPathXmlApplicationContext
				("applicationContext.xml");
		Person p1 = (Person) applicationContext.getBean("person");
		System.out.println(p1);
	}

2.名稱空間

在xsd-config檔案中找到約束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
配置檔案:
<bean id="car2" class="cn.nedu.wy.demo05.Car2" p:name="賓士" p:price="200"></bean>

3.SpEL   Spring的表示式語言

#{‘常量’}

#{id名.屬性}

#{id名.方法}

PersonInfo類:

package cn.nedu.wy.demo05;

public class PersonInfo {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	public String showName(){
		return name;
	}
}


配置檔案:

	<bean id="car2" class="cn.nedu.wy.demo05.Car2" >
		<property name="name" value="#{'賓士'}" />
		<property name="price" value="#{'201'}"/>
	</bean>
	
	<bean id="person" class="cn.nedu.wy.demo05.Person">
		<!-- <property name="name" value="#{personInfo.name}" /> -->
		<property name="name" value="#{personInfo.showName()}" />
		<property name="car2" ref="car2"></property>
	</bean>
	<bean id="personInfo" class="cn.nedu.wy.demo05.PersonInfo">
		<property name="name" value="SpEL注入的小躍哥" />
	</bean>
#{personInfo.showName()}呼叫了Person中的showName()方法

4.集合屬性注入   list   set   map

CollectionBean類:

package cn.nedu.wy.demo06;

import java.util.List;
import java.util.Map;
import java.util.Set;

public class CollectionBean {
	private List<String> list;
	private Set<String> set;
	private Map<String,Integer> map;
	
	public void setMap(Map<String, Integer> map) {
		this.map = map;
	}
	public void setSet(Set<String> set) {
		this.set = set;
	}
	public void setList(List<String> list){
		this.list = list;
	}
	@Override
	public String toString() {
		return "CollectionBean [list=" + list + ", set=" + set + ", map=" + map + "]";
	}
	
}
配置檔案:
<bean id="collectionBean" class="cn.nedu.wy.demo06.CollectionBean">
	<!-- 注入list集合 -->
		<property name="list">
			<list>
				<value>hello</value>
				<value>world</value>
			</list>
		</property>
	<!-- 注入set集合 -->
	<property name="set">
		<set>
			<value>hello</value>
			<value>world</value>
		</set>
	</property>
	<!-- 注入map集合 -->
	<property name="map">
		<map>
			<entry key="小明" value="123" />
			<entry key="小紅" value="456"></entry>
		</map>
	</property>
	</bean>
測試方法:
package cn.nedu.wy.demo06;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest06 {
	
	@Test
	public void demo01(){
		ApplicationContext applicationContext = new 
				ClassPathXmlApplicationContext
				("applicationContext.xml");
		CollectionBean c1 = (CollectionBean) applicationContext.getBean("collectionBean");
		System.out.println(c1);
	}
}