Spring - DI 성격을 가진 예시 코드들(객체 컨테이너 만들기 - ApplicationContext)

김도형·2023년 1월 29일
0

외부 파일(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)

profile
3년간 웹/앱, 자동제어 QA 🔜 개발자로 전향하여 현재 교육 회사에서 백엔드 개발자로 근무 중입니다.(LinkedIn : https://www.linkedin.com/in/dohyoung-kim-5ab09214b)

0개의 댓글