1. 程式人生 > >ssh學習:Spring注入方式

ssh學習:Spring注入方式

Spring的注入方式:

設值注入:

設值注入就是給該類的屬性通過set方法設值。在Spring的配置檔案當中,使用<property></property>標籤設值。

在<property></property>中,name值對應類中的屬性名,且必須一致;ref值則是對應的資料來源id,且必須一致。

構造注入:

構造注入就是該該類的屬性通過構造方法傳引數的方式設值。在Spring配置檔案當中使用<constructor-arg></constructor-arg>標籤進行設值。

在<constructor-arg></constructor-arg>中,name值對應類中的屬性名,且必須一致;ref值則是對應的資料來源id,且必須一致。

以打折的例項舉例一下:

設定注入:

打折計算的介面:

public interface IDiscounts {
	public double discount(double price);
}

半價實體:

public class HalfPrice implements IDiscounts {
	@Override
	public double discount(double price) {
		return price * 0.5;
	}
}

不打折實體:

public class FullPrice implements IDiscounts {
	@Override
	public double discount(double price) {
		return price;
	}
}

結算實體:

public class Accounts {
	private IDiscounts iDiscounts;//打折的介面,必須實現set方法
	public double account(double price) {
		return iDiscounts.discount(price);
	}
}

Spring配置檔案:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<!-- 新增每一個bean -->
	<!-- id為別號,class為相對應的類 -->
	<bean id="fullPrice
" class="com.usc.geowind.lilin.bean.inflood.FullPrice" /> <bean id="halfPrice" class="com.usc.geowind.lilin.bean.inflood.HalfPrice" /> <bean id="account" class="com.usc.geowind.lilin.bean.inflood.Accounts"> <!-- 設值注入 --> <!-- name是該類對應的屬性名,必須一致 ; --> <!-- ref對映:值為該屬性引數對應的資料來源。比如上面的資料來源ID:fullPrice --> <property name="iDiscounts" ref="fullPrice"></property> </bean> </beans>

程式入口:

public static void main(String[] args) {
	// 讀取配置檔案
	Resource resource = new FileSystemResource("shop.xml");
	// 載入配置檔案 ,啟動IOC容器
	BeanFactory factory = new XmlBeanFactory(resource);
	// 從IOC容器中獲取例項
	Accounts accounts = factory.getBean(Accounts.class);
	System.out.println(accounts.account(40.0));

}

 構造注入:

結算實體做一下修改:

public class Accounts {
	private IDiscounts iDiscounts;
	public Accounts(IDiscounts iDiscounts) {
		this.iDiscounts = iDiscounts;
	}
	public double account(double price) {
		return iDiscounts.discount(price);
	}
}

Spring配置檔案:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<!-- 新增每一個bean -->
	<!-- id為別號,class為相對應的類 -->
	<bean id="fullPrice" class="com.usc.geowind.lilin.bean.inflood.FullPrice" />
	<bean id="halfPrice" class="com.usc.geowind.lilin.bean.inflood.HalfPrice" />
	<bean id="account" class="com.usc.geowind.lilin.bean.inflood.Accounts">
		<!-- 構造注入 -->
		<!-- 順序與構造方法引數順序一致 -->
		<!-- ref對映:值為該屬性引數對應的資料來源。比如上面的資料來源ID:fullPrice -->
		<constructor-arg  ref="halfPrice"></constructor-arg>
	</bean>
</beans>