構建Spring項目關鍵步驟:java
1.導入依賴Jar包:spring
2.編寫JAVA文件,以及配置文件,機構如圖所示:框架
位置可移動,具體下邊詳解.測試
如此,一個簡單的Spring項目基本框架搭建完成.this
Spring核心機制在於依賴注入或者叫控制反轉(IOC).依賴注入不單單有Spring,亦有HiveMind,具體待之後瞭解補充.xml
依賴注入能夠認爲是,使用者不須要關心對象如何生成,直接就能夠拿來用,對象的生成由容器控制生成,注入方式通常有兩種(還有第三種,接口注入暫不描述).對象
第一個是設值注入,即經過set方法注入,代碼以下:接口
public interface Person {
public void useAxe();
}get
--------------------------------------io
public interface Axe {
public String chop();
}
--------------------------------------
public class Chinese implements Person {
private Axe axe;
public void setAxe(Axe axe) {
this.axe = axe;
}
public void useAxe() {
System.out.println(axe.chop());
}
}
--------------------------------------
public class StoneAxe implements Axe {
public String chop() {
return "石斧砍";
}
}
--------------------------------------
配置文件內容:
<bean id="stoneAxe" class="main.java.service.impl.StoneAxe" />
<bean id="chinese" class="main.java.service.impl.Chinese">
<property name="axe" ref="steelAxe" />
</bean>
--------------------------------------
測試類:
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
//ClassPathXmlApplicationContext加載路徑默認src
//new FileSystemXmlApplicationContext("src/bean.xml");
//FileSystemXmlApplicationContext默認加載路徑爲項目根目錄
Person person = ctx.getBean("chinese", Person.class);
person.useAxe();
--------------------------------------
輸出結果:石斧砍
第二個是構造注入,即經過構造器注入,代碼以下:
public class Chinese implements Person {
private Axe axe;
public Chinese () {}
public Chinese (Axe axe) {
this.axe = axe;
}
public void useAxe() {
System.out.println(axe.chop());
}
}
--------------------------------------
配置文件:
<bean id="chinese" class="main.java.service.impl.Chinese">
<constructor-arg ref="steelAxe" />
</bean>
--------------------------------------
兩種方式各有千秋,若是比較複雜的依賴,使用構造注入,形參的不肯定性,可能致使構造器比較笨重.固然若是有明確的依賴關係,使用構造依賴可以清楚地決定注入順序.因爲依賴關係都在構造器內設定,不用擔憂上層代碼的破壞,這裏須要理解spring對於bean的初始化以及scope,待明天記錄.構造注入還有一個好處就是因爲在構造器內設定依賴關係,故只有組建建立者能夠修改,對於使用者透明,符合高內聚.
另外還有一種依賴方式是接口注入,之後會作補充.
遺留問題:
1.Spring的Bean初始化過程,scope屬性詳解(參見scope詳解).
2.HiveMind詳解