본문 바로가기
dev/Spring

[Spring] Di 따라하기 2

by dev_Step 2022. 6. 22.
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);

    }




}

 

HouseConfig.txt 파일

>> 아래 그림과 같이 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