Spring4 IOC容器(bean容器)

第五節:注入參數

1,基本類型值;

	<bean id="people1" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="張三"></property>
		<property name="age" value="11"></property>
	</bean>

2,注入 bean;

	<bean id="dog1" class="com.java1234.entity.Dog">
		<property name="name" value="Jack"></property>
	</bean>
	
	<bean id="people2" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="張三"></property>
		<property name="age" value="11"></property>
		<property name="dog" ref="dog1"></property>
	</bean>

3,內部 bean;

	<bean id="people3" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="張三"></property>
		<property name="age" value="11"></property>
		<property name="dog">
			<bean class="com.java1234.entity.Dog">
				<property name="name" value="Tom"></property>
			</bean>
		</property>
	</bean>

4,null 值;

	<bean id="people4" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="張三"></property>
		<property name="age" value="11"></property>
		<property name="dog">
			<null></null>
		</property>
	</bean>

5,級聯屬性;
必須要在父bean類裏面進行實例化,這種級聯屬性不常用。

	<bean id="people5" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="張三"></property>
		<property name="age" value="11"></property>
		<property name="dog.name" value="Jack2"></property>
	</bean> 

6,注入集合類型屬性;(list,set,map)以及一種Spring支持的Properties屬性

	<bean id="people6" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="張三"></property>
		<property name="age" value="11"></property>
		<property name="dog" ref="dog1"></property>
		<property name="hobbies">
			<list>
				<value>唱歌</value>
				<value>跳舞</value>
			</list>
		</property>
		<property name="loves">
			<set>
				<value>唱歌2</value>
				<value>跳舞2</value>
			</set>
		</property>
		<property name="works">
			<map>
				<entry>
					<key><value>上午</value></key>
					<value>寫代碼</value>
				</entry>
				<entry>
					<key><value>下午</value></key>
					<value>測試代碼</value>
				</entry>
			</map>
		</property>
		<property name="addresses">
			<props>
				<prop key="address1">aaaaa</prop>
				<prop key="address2">bbbbb</prop>
			</props>
		</property>
	</bean>
package com.java1234.entity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class People {

	private int id;
	private String name;
	private int age;
	private Dog dog;//如果用的是級聯屬性注入,則需要改成private Dog dog=new Dog();
	private List<String> hobbies=new ArrayList<String>();
	private Set<String> loves=new HashSet<String>();
	private Map<String,String> works=new HashMap<String,String>();
	private Properties addresses=new Properties();
	
	public People() {
		super();
		// TODO Auto-generated constructor stub
	}
		
	public People(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}

	
	public Set<String> getLoves() {
		return loves;
	}

	public void setLoves(Set<String> loves) {
		this.loves = loves;
	}

	public List<String> getHobbies() {
		return hobbies;
	}

	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}


	public Map<String, String> getWorks() {
		return works;
	}

	public void setWorks(Map<String, String> works) {
		this.works = works;
	}


	public Properties getAddresses() {
		return addresses;
	}


	public void setAddresses(Properties addresses) {
		this.addresses = addresses;
	}


	public Dog getDog() {
		return dog;
	}

	public void setDog(Dog dog) {
		this.dog = dog;
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "People [id=" + id + ", name=" + name + ", age=" + age
				+ ", dog=" + dog + ", hobbies=" + hobbies + ", loves=" + loves
				+ ", works=" + works + ", addresses=" + addresses + "]";
	}
	
}

第六節:Spring自動裝配通過配置 (前面都是手動注入)

通過配置default-autowire 屬性,Spring IOC 容器可以自動爲程序注入 bean;
默認是 no,不啓用自動裝配;
default-autowire 的類型有 byName,byType,constructor;
byName:通過名稱進行自動匹配;
byType:根據類型進行自動匹配;
constructor:和 byType 類似,只不過它是根據構造方法注入而言的,根據類型,自動注入;

建議:自動裝配機制慎用,它屏蔽了裝配細節,容易產生潛在的錯誤

第七節 方法注入

方法注入
Springbean 作用域默認是 單例 singleton; 可以通過配置 prototype ,實現多例;
方法注入 lookup-method

第八節 方法替換

實體類實現MethodRepplacer接口,父類獲取其他父類的屬性

第九節 bean之間的關係

1、繼承

<bean id="abstractPeople" class="com.java1234.entity.People" abstract="true">
		<property name="className" value="高三5班"></property>
		<property name="age" value="19"></property>
	</bean>
	
	<bean id="zhangsan" parent="abstractPeople" >
		<property name="id" value="1"></property>
		<property name="name" value="張三"></property>
	</bean>
	
	<bean id="lisi" parent="abstractPeople">
		<property name="id" value="2"></property>
		<property name="name" value="李四"></property>
		<property name="age" value="20"></property>
	</bean>

2、依賴
即當用戶請求某一個帶有depends-on屬性的bean時候,spring會先執行depends-on的bean

	<bean id="zhangsan" parent="abstractPeople" depends-on="autority">
		<property name="id" value="1"></property>
		<property name="name" value="張三"></property>
	</bean>
	
	<bean id="lisi" parent="abstractPeople">
		<property name="id" value="2"></property>
		<property name="name" value="李四"></property>
		<property name="age" value="20"></property>
		<property name="dog" ref="dog"></property>
	</bean>
	
	
	<bean id="autority" class="com.java1234.service.Authority"></bean>

3、引用

	<bean id="dog" class="com.java1234.entity.Dog">
		<property name="name" value="jack"></property>
	</bean>
	<bean id="lisi" parent="abstractPeople">
		<property name="id" value="2"></property>
		<property name="name" value="李四"></property>
		<property name="age" value="20"></property>
		<property name="dog" ref="dog"></property>//引用
	</bean>

第十節 bean作用範圍

1,singleton Spring ioc 容器中僅有一個 Bean 實例,Bean 以單例的方式存在,當用戶請求的時候只是把容器獨有的bean返回給用戶;
2,prototype 每次從容器中調用 Bean 時,都返回一個新的實例; 在bean中聲明scope範圍
3,request 每次 HTTP 請求都會創建一個新的 Bean;
4,session 同一個 HTTPSession 共享一個 Bean;
5,globalsession 同一個全局 Session 共享一個 Bean,一般用於 Portlet 應用環境;
6,application 同一個 Application 共享一個 Bean

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章