spring注入方式解析

本例主要說明spring的集中注入方式:set注入(又名屬性注入)、構造注入、靜態工廠注入、非靜態工廠注入、方法注入。

1、set注入

要求被注入的bean對象對應的屬性要有setXxxx的方法如部門編碼屬性deptCode得有setDeptCode的方法

package com.hsk.spring.bean;

public class DeptBean {

	private String deptCode;
	
	private String deptName;
	
	private String deptPcode;
	
	private String cmpyCode;

	public String getDeptCode() {
		return deptCode;
	}

	public void setDeptCode(String deptCode) {
		this.deptCode = deptCode;
	}

	public String getDeptName() {
		return deptName;
	}

	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}

	public String getDeptPcode() {
		return deptPcode;
	}

	public void setDeptPcode(String deptPcode) {
		this.deptPcode = deptPcode;
	}

	public String getCmpyCode() {
		return cmpyCode;
	}

	public void setCmpyCode(String cmpyCode) {
		this.cmpyCode = cmpyCode;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "set注入DeptBean:"+deptCode+"/"+deptPcode+"/"+cmpyCode+"/"+deptName;
	}
}

xml中set注入的配置:

<!-- set注入 -->
		<bean id="deptBean" class="com.hsk.spring.bean.DeptBean">
			<property name="deptCode" value="24"></property>
			<property name="deptName" value="北京有限公司"></property>
			<property name="cmpyCode" value="2"></property>
			<property name="deptPcode" value="21"></property>
		</bean>

測試結果:

2、構造注入:

package com.hsk.spring.bean;

public class UserBean {

	private String userCode;
	private String userName;
	private String deptCode;
	private DeptBean deptBean;
	public String getUserCode() {
		return userCode;
	}
	public void setUserCode(String userCode) {
		this.userCode = userCode;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getDeptCode() {
		return deptCode;
	}
	public void setDeptCode(String deptCode) {
		this.deptCode = deptCode;
	}
	public DeptBean getDeptBean() {
		return deptBean;
	}
	/**
	 * set注入
	 * @param deptBean
	 */
	public void setDeptBean(DeptBean deptBean) {
		System.out.println("spring set注入deptBean");
		this.deptBean = deptBean;
	}
	/**
	 * 構造方法注入
	 */
	public UserBean(DeptBean deptBean){
		System.out.println("spring 構造方法注入deptBean"+deptBean);
	}
	public UserBean(String deptCode,String userCode,String userName){
		System.out.println("spring 構造方法注入UserBean:"+deptCode+"/"+userCode+"/"+userName);
	}
	
}

xml中構造注入配置:

<!-- 構造方法注入 -->
        <bean id="userBean" class="com.hsk.spring.bean.UserBean">
            <constructor-arg index="0" value="這是第一個構造方法傳參"></constructor-arg>
            <constructor-arg index="1" value="這是第二個構造方法傳參"></constructor-arg>
            <constructor-arg index="2" value="這是第三個構造方法傳參"></constructor-arg>
            <property name="deptBean" ref="deptBean"></property>
        </bean>

運行結果:

3、靜態工廠方法注入

package com.hsk.spring.bean;

public class UserBeanStaticFactory {

	/**
	 * 靜態工廠方法注入
	 * @return
	 */
	public static UserBean createUserBean(){
        System.out.println("這是靜態工廠方法注入");
		return new UserBean("33", "44", "李四");
	}
}

 xml中配置:

<bean id="staticFactory" class="com.hsk.spring.bean.UserBeanStaticFactory"
        factory-method="createUserBean">
        </bean>

運行結果:

4、非靜態方法注入

package com.hsk.spring.bean;

public class UserBeanFactory {

	/**
	 * 非靜態方法注入
	 */
	public UserBean createUserBean()
	{
		System.out.println("非靜態方法注入");
		return new UserBean("24","25","張三");
	}
}

 xml中配置:

<bean id="userBean" class="com.hsk.spring.bean.UserBean"
         factory-bean="beanFactory" factory-method="createUserBean"></bean>
        <bean id="beanFactory" class="com.hsk.spring.bean.UserBeanFactory"></bean>

運行結果:

5、方法注入(一般用於單例的bean依賴於多實例的bean對象的時候在單例的bean中注入)

package com.hsk.spring.bean;

public abstract class CardBean {

	private String cardId;
	private String cardAddr;
	//這是一個多實例的依賴bean的注入方式
	protected abstract UserBean createUserBean();
	public String getCardId() {
		return cardId;
	}
	public void setCardId(String cardId) {
		this.cardId = cardId;
	}
	public String getCardAddr() {
		return cardAddr;
	}
	public void setCardAddr(String cardAddr) {
		this.cardAddr = cardAddr;
	}
	
}

 xml中配置:

<!-- lookup-method方法注入 -->
		<bean id="multiExampleDeptBean" class="com.hsk.spring.bean.DeptBean"></bean>
		<bean id="cardBean" class="com.hsk.spring.bean.CardBean" scope="singleton">
			<lookup-method name="createUserBean" bean="multiExampleDeptBean"/>
		</bean>

運行結果:

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