Spring基於構造函數和設值函數的依賴注入


基於構造函數的依賴注入

我們知道,bean標簽中指定的類會進行初始化,這個初始化過程中自然會調用構造函數,那我們也可以利用這個構造函數完成依賴注入。

先創建一個類:

public class TextEditor {
    public TextEditor(SpellChecker spellChecker) {
        System.out.println("TextEditor的構造函數");
    }

    public TextEditor(String s) {
        System.out.println(s);
    }
}

如上,可以看見有兩個構造函數。

第一個構造函數的參數是自定義類型,第二個是一個字符串類型。兩種不同的參數類型在配置文件中的寫法是不一樣的,下面會提到。

再創建一個測試類:

public class MainApps {
    public static void main(String[] args) {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        TextEditor editor = (TextEditor) context.getBean("text");
    }
}

配置文件內容如下:

<bean id="text" class="Dependency.injection.TextEditor">
     <constructor-arg type="java.lang.String" value="這是一個構造函數注入的值"/>
</bean>

配置文件中,除了常見的bean標簽,需要使用constructor-arg標簽來完成構造函數的注入。

運行測試類輸出:

這是一個構造函數注入的值

如果向調用上面一個構造函數,配置文件內容如下:

<bean id="text" class="Dependency.injection.TextEditor">
  <constructor-arg ref="spellChecker"/>
</bean>
<bean id="spellChecker" class="Dependency.injection.SpellChecker"/>

注意:

1.如果你需要傳遞一個對象的引用,就直接用ref;如果你需要傳遞一個java自帶的數據類型,則需要先在type里聲明類型,再用value設置值。

2.如果構造參數的參數列表有多個參數,則傳遞的順序就是參數列表的順序。

 

基於設值函數的依賴注入

通過bean調用設值函數來完成依賴注入。

先准備一個類:

public class TextEditor {
    private String name;
    //設值函數
    public void setName(String name) {
        this.name = name;
    }

    public void getName() {
        System.out.println(this.name);
    }

}

注意私有屬性name,下面會通過bean設置這個屬性的值。

再准備一個測試類:

public class MainApps {
    public static void main(String[] args) {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        TextEditor editor = (TextEditor) context.getBean("text");
        editor.getName();
    }
}

配置文件內容如下:

<bean id="text" class="Dependency.injection.TextEditor">
  <property name="name" value="李四"/>
</bean>

運行測試類輸出:

李四

注意:

1.設值函數也可以傳遞引用,同樣使用ref。

2.配置文件中,設值函數用的是property。構造函數注入用的是constructor-arg

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM