專案目錄
控制反轉-IOC
步驟:
匯入相關jar包 lib
編寫Spring配置檔案(名稱可自定義), beans。xml
定義類:
package com。xj。bean;public class Hello { private String name; public Hello() { System。out。println(“Hello物件被建立”); } public void setName(String name) { this。name = name; } public void show() { System。out。println(“我親愛的,” + name); }}
編寫Spring配置檔案(名稱可自定義), beans。xml
<?xml version=“1。0” encoding=“UTF-8”?>
測試程式碼:
package com。xj。test;import com。xj。bean。Hello;import javafx。application。Application;import org。springframework。context。ApplicationContext;import org。springframework。context。support。ClassPathXmlApplicationContext;public class Test { public static void main(String[] args) { //解析beans。xml檔案,生產相應的bean物件 ApplicationContext context = new ClassPathXmlApplicationContext(“beans。xml”); Hello hello = (Hello)context。getBean(“hello”); hello。show(); }}
output:
十一月 07, 2019 10:02:34 下午 org。springframework。context。support。AbstractApplicationContext prepareRefresh資訊: Refreshing org。springframework。context。support。ClassPathXmlApplicationContext@244038d0: startup date [Thu Nov 07 22:02:34 CST 2019]; root of context hierarchy十一月 07, 2019 10:02:34 下午 org。springframework。beans。factory。xml。XmlBeanDefinitionReader loadBeanDefinitions資訊: Loading XML bean definitions from class path resource [beans。xml]Hello物件被建立我親愛的,中國Process finished with exit code 0
思考:
1、Hello物件是誰建立的?
可以使用hello。show();呼叫它的方法,說明Hello物件被建立。
Hello物件是由Spring容器建立的
2、hello物件的屬性是怎麼設定的(即name怎麼得到“中國”的)?
Hello物件的屬性是由Spring容器設定的,這個過程就叫控制反轉
控制的內容:指誰來控制物件的建立,傳統的應用程式物件的建立是由程式本身,使用Spring之後,由Spring來建立物件。
反轉:(建立物件的)許可權的轉移
正轉:指程式來建立物件;
反轉:指程式本身不去建立物件,而變為被動去接收由Spring容器建立的物件。
總結:以前物件由程式本身(service實現類)來建立,使用Spring後,程式變為被動接收Spring建立好的物件。
控制反轉:——依賴注入(dependency injection)
依賴注入(dependency injection)
比如:Hello類,依賴name,name的值是透過容器來設定的。
反過來,“中國”這個value是透過
public void setName(String name){
this。name = name;
}