1. 程式人生 > >Spring 學習筆記(二)IOC之簡單工廠模擬IOC

Spring 學習筆記(二)IOC之簡單工廠模擬IOC

  • 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物件出來的話,  就得改程式碼了。