屬性注入、構造器注入

構建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詳解

相關文章
相關標籤/搜索