Spring基於建構函式和設值函式的依賴注入
阿新 • • 發佈:2019-11-25
基於建構函式的依賴注入
我們知道,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
&n