외부 파일(Config)로 DI 성격을 가진 예시 코드에 대해서 블로그 작성했다면,
이번에는 객체 컨테이너 생성 + 외부 파일로 코드를 구성했다.
config.txt 의 객체 정보를 객체 컨테이너에서 생성해서,
객체 컨테니어에서 객체 정보(주소)를 가져오기.
이 코드 또한 저번에 블로그 작성한 내용 과 동일하게 객체 변경할 때는 config 파일에서 수정하면 된다.
package com.fastcampus.ch3.diCopy2;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
class Car {}
class SportsCar extends Car {}
class Truck extends Car {}
class Engine extends Car {}
class AppConext {
Map map; // 객체 저장소
AppConext() {
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);
}
}
public class main2 {
public static void main(String[] args) throws Exception {
AppConext ac = new AppConext();
Car car = (Car) ac.getBean("car");
Engine engine = (Engine) ac.getBean("engine");
System.out.println("car = " + car);
System.out.println("engine = " + engine);
}
}
그러면 config.txt 에서 수동으로 객체를 등록하고 있는데
자동 객체 등록
으로 객체를 등록할 수 없을까?
자동 객체 등록 내용은 아래 링크를 확인하면 된다.
https://velog.io/@to9251/Spring-%EC%9E%90%EB%8F%99-%EA%B0%9D%EC%B2%B4-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0Component-Scanning
출처 : 남궁성 저자의 스프링의 정석(패스트 캠퍼스)(https://fastcampus.co.kr/dev_academy_nks)