Burninghering's Blog
article thumbnail

Oracle JDK version 19.0.2 선택

 


개선된 Main3 코드

<java />
package com.fastcampus.ch3.diCopy3; import com.google.common.reflect.ClassPath; import org.springframework.util.StringUtils; import org.springframework.stereotype.Component; import java.awt.*; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Set; @Component class Car{} @Component class SportsCar extends Car{} @Component class Truck extends Car{} //@Component class Engine{} class AppContext{ Map map; //객체 저장소 AppContext() { map = new HashMap(); doComponentScan(); } private void doComponentScan(){ try { //1. 패키지 내의 클래스 목록을 가져온다. //2. 반복문으로 클래스를 하나씩 읽어와서 @Component가 붙어있는지 확인 //3. @Component가 붙어있으면 객체를 생성해서 map에 저장 ClassLoader classLoader = AppContext.class.getClassLoader(); ClassPath classPath = ClassPath.from(classLoader); Set<ClassPath.ClassInfo> set = classPath.getTopLevelClasses("com.fastcampus.ch3.diCopy3"); for(ClassPath.ClassInfo classInfo:set){ Class clazz = classInfo.load(); Component component=(Component) clazz.getAnnotation(Component.class); if(component!=null){ String id= StringUtils.uncapitalize(classInfo.getSimpleName()); map.put(id,clazz.newInstance()); } } } catch (Exception e) { e.printStackTrace(); } } Object getBean(String key){ return map.get(key); } } public class Main3 { public static void main(String[] args) throws Exception { AppContext ac = new AppContext(); Car car = (Car) ac.getBean("car"); Engine engine = (Engine) ac.getBean("engine"); System.out.println("car = " + car); System.out.println("engine = " + engine); } }

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

http://bit.ly/3Y34pE0

profile

Burninghering's Blog

@개발자 김혜린

안녕하세요! 반갑습니다.