Spring中Bean的複雜屬性注入
阿新 • • 發佈:2019-02-14
1.物件屬性
2.名稱空間
3.SpEL
4.集合屬性注入
-----------------------------------------------------------------------------------------------------------------
假設有兩個類,1.Person類 屬性有 人名,車
2.Car2類 屬性有 車名,價格
Person類:
Car2類: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 + "]"; } }
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);
}
}