Spring 學習筆記(二)IOC之簡單工廠模擬IOC
阿新 • • 發佈:2018-12-16
- IOC不是一種技術,是一種思想。
- 依賴注入是一種設計模式。
- IOC不等於依賴注入。
是把例項化物件的操作交給IOC容器, 程式碼中用到物件的時候就去IOC容器中取。使得物件與物件之間鬆散耦合。
簡單工廠模擬IOC
1. 建立People介面
package org.spring.example;
public interface People {
public void getPeopleName();
}
2. 建立兩個實現類 Kazhafei、Sadamu
package org.spring.example; public class Kazhafei implements People { public Kazhafei( ) { } @Override public void getPeopleName() { System.out.println("我是卡扎菲"); } }
package org.spring.example;
public class Sadamu implements People{
public Sadamu() {
System.out.println("構造:薩達姆初始化");
}
@Override
public void getPeopleName() {
System.out.println("我是薩達姆");
}
}
3. 新建配置檔案 my.properties
people=org.spring.example.Sadamu
4. 新建工廠類
package org.spring.example; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class PeopleFactory { private static Properties properties = new Properties(); static { try { //讀取配置檔案並載入 InputStream inputStream = PeopleFactory.class.getResourceAsStream("my.properties"); properties.load(inputStream); } catch (IOException e) { e.printStackTrace(); } } //從配置檔案中獲取到類的全名稱,並通過反射例項化 public static Object getBean(String name) { String className = properties.getProperty(name); try { return Class.forName(className).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } throw new IllegalArgumentException("查無此人!"); } }
5. 在Test測試類中測試
package org.spring.example;
public class Test {
public static void main(String[] args) {
People people = (People) PeopleFactory.getBean("people");
people.getPeopleName();
}
}
輸出:
構造:薩達姆初始化
我是薩達姆
當需要獲取Kazhafei物件時只需要修改配置檔案(my.properties)中的類路徑即可。
如果按照傳統方式new物件出來的話, 就得改程式碼了。