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 |