5、DL依賴注入
阿新 • • 發佈:2021-01-02
DL
- 依賴注入:Dependency Injection。它是 spring 框架核心 ioc 的具體實現。
- 為什麼需要DL?
- 我們的程式在編寫時,通過控制反轉,把物件的建立交給了 spring,但是程式碼中不可能出現沒有依賴的情況。
- ioc 解耦只是降低他們的依賴關係,但不會消除。例如:我們的業務層仍會呼叫持久層的方法。
- 那這種業務層和持久層的依賴關係,在使用 spring 之後,就讓 spring 來維護了。
- 簡單的說,就是坐等框架把持久層物件傳入業務層,而不用我們自己去獲取。
1、建構函式注入(必須為所有引數賦值):
詳情請參考我的上一篇部落格:IOC建立物件的方式(基於建構函式的依賴注入)
2、set方法注入(不需要為所有成員賦值):
只使用setter方法:
pojo實體類:
/** * @author zhangzhixi */ public class Student { private String id; private String name; private List<String> hobbies; private Map<String,String> location; public String getId() { return id; } publicvoid setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<String> getHobbies() { return hobbies; } public void setHobbies(List<String> hobbies) {this.hobbies = hobbies; } public Map<String, String> getLocation() { return location; } public void setLocation(Map<String, String> location) { this.location = location; } @Override public String toString() { return "Student{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", hobbies=" + hobbies + ", location=" + location + '}'; } }
bens.xml:
<bean id="student" class="com.zhixi.pojo.Student">
<property name="id" value="2018021506"/>
<property name="name" value="張志喜"/>
</bean>
測試類:
public class MyTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("bens.xml"); Student student = (Student) context.getBean("student"); System.out.println(student.getId()); // 2018021506 System.out.println(student.getName()); // 張志喜 } }
2.1、注入List跟Map集合
bens.xml:
<bean id="student" class="com.zhixi.pojo.Student"> <property name="hobbies"> <list> <value>抽菸</value> <value>喝酒</value> <value>燙頭</value> </list> </property> <property name="location"> <map> <entry key="464300" value="息縣"/> <entry key="464000" value="信陽"/> <entry key="450000" value="鄭州"/> </map> </property> </bean>
測試類:
public class MyTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("bens.xml"); Student student = (Student) context.getBean("student"); List<String> hobbies = student.getHobbies(); for (String hobby : hobbies) { System.out.println(hobby); } Map<String, String> location = student.getLocation(); System.out.println(location.get("464300")); } }
輸出結果:
抽菸
喝酒
燙頭
息縣