ssh學習:Spring注入方式
阿新 • • 發佈:2019-02-03
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>