class AppContext {
Map map; //객체 저장소
AppContext() {
try {
Properties p = new Properties();
p.load(new FileReader("config.txt"));
// Properties에 저장된 내용을 Map에 저장
map = new HashMap(p);
// 반복문으로 클래스이름을 얻어서 객체를 생성해서 다시 map에 저장
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);
}
}
[config.txt]
car=com.fastcampus.ch3.diCopy2.Truck
engine=com.fastcampus.ch3.diCopy2.Engine
위 코드에서 config.txt의 값을 읽어서 Properties 객체의 p 변수안에 저장한다. 해시맵을 생성하고 map에 읽은 값을 저장한다. Reflection API로 클래스이름을 얻고 객체를 생성하여 다시 map에 저장한다.
Class clazz = Class.forName((String)map.get(key));
Properties의 값은 Object형이므로 Map의 String형으로 변환해주기위해 타입변환을 한다.
map.put(key, clazz.newInstance());
객체를 생성하여 map에 다시 저장한다.