class House{}
class WoodHouse extends House{}
class BrickHouse extends House{}
class Window{}
public class DiTest2 {
    Map map;
    public DiTest2() throws Exception{
        // 지금 까지는 getObject(String key)라는 메서드를 통해서
        // key 값을 받은 value에 해당하는 객체를 생성하여 리턴하였는데
        // 이제부터는 Properties 파일에 정의되어 있는 모든 Class를 Map에
        // 넣은 상태로 꺼내 쓰는 형식으로 만들어 보겠다.
        try {
            Properties p = new Properties();
            p.load(new FileReader("HouseConfig.txt"));
            map = new HashMap(p);
            //map의 key값을 통해서 Class를 만들어서 map안에 (key, 객체) 넣는다.
            for(Object key : map.keySet()){
                Class clazz = Class.forName((String)map.get(key));
                map.put(key,clazz.newInstance());
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }
    Object getBean(String key){
        return map.get(key);
    }
    public static void main(String[] args) throws Exception {
        //DiTest2 생성자를 통해서
        //Properties 안에 정의 되어있는 클래스를 모두 객체화 하여 map에 (K,V)형태로
        //넣어 주었었다. 또한 getBean(String key) 를 통해서 map에 저장되어 있는 객체를
        //꺼내서 쓸수 있따.
        DiTest2 d = new DiTest2();
        House h = (House)d.getBean("house");
        House h2 = (House)d.getBean("woodhouse");
        House h3 = (House)d.getBean("brickhouse");
        Window window = (Window)d.getBean("window");
        System.out.println("h = " + h);
        System.out.println("h2 = " + h2);
        System.out.println("h3 = " + h3);
        System.out.println("window = " + window);
    }
}

>> 아래 그림과 같이 Ditest2 의 생성자를 통해서
>> Map 안에 K값으로 String (house, woodhouse, brickhouse, window) 가 들어있고
>> Value 값에는 String 으로 저장되어 있던것이 Class의 forName() 을 통해서 객체화 되어 들어가있다.(주소값이)
>> getBean(String key) 메서드를 통해서 해당 객체를 가지고 오는 것은
>> String 값을 통해서 가지고 오는 방법으로 by Name 방식이라고 하는데
 Object getBean(String key){
        return map.get(key);
    }
>> 이번에는 Map의 Value 값인 객체를 통해서 가지고 오는 방법을 한번 알아보자
Object getBean(Class clazz){
    for(Object obj : map.values()){
        if(clazz.isInstance(obj)){
            return obj;
        }
    }
    return null;
}
>> 실행결과
>> Class.isInstance(OtherClass);
>> 다형성에 의해서 hh 는 House.Class임에 불구하고 BrickHouse로 생성되었다.
h = com.fastcampus.ch3.testDi3.House@5b37e0d2
h2 = com.fastcampus.ch3.testDi3.WoodHouse@4459eb14
h3 = com.fastcampus.ch3.testDi3.BrickHouse@5a2e4553
window = com.fastcampus.ch3.testDi3.Window@28c97a5
hh = com.fastcampus.ch3.testDi3.BrickHouse@5a2e4553
hh2 = com.fastcampus.ch3.testDi3.WoodHouse@4459eb14
hh3 = com.fastcampus.ch3.testDi3.BrickHouse@5a2e4553
'dev > Spring' 카테고리의 다른 글
| [Spring] Di 따라하기 4 (0) | 2022.06.22 | 
|---|---|
| [Spring] Di 따라하기 3 (0) | 2022.06.22 | 
| [Spring] Di 따라하기 1 (0) | 2022.06.22 | 
| [Spring] Export / Import (0) | 2022.06.20 | 
| [Spring] form:form 태그 공부 (0) | 2022.06.19 | 
 
                    
                   
                    
                  