Java

Java Class Instance화

gregorio 2018. 2. 12. 16:05

Java에서 Class Name으로 객체를 생성하기 위해서는 package이름을 알고 class 이름을 알고 있으면 쉽게 객체를 생성할 수 있다.


현재 프로젝트 내에 있는 모든 패키지에서 특정 클래스 이름으로 객체를 생성하기 위한 예제 코드이다.


  public <T> T getBean(String beanName) throws Exception {

    List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();

    classLoadersList.add(ClasspathHelper.contextClassLoader());

    classLoadersList.add(ClasspathHelper.staticClassLoader());

    

    Reflections reflections = new Reflections(new ConfigurationBuilder()

            .setScanners(new SubTypesScanner(false), new ResourcesScanner())

            .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))

            .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix("MY BASE PACKAGE"))));

    Set<Class<? extends Object>> classes = reflections.getSubTypesOf(Object.class);

    

    for (Class<?> clazz : classes) {

    int idx = clazz.getName().lastIndexOf(".");

    String clazzName = clazz.getName().substring(idx+1);

    if (clazzName.equals(beanName)) {

    return (T)ClassUtils.getClass(clazz.getName()).newInstance();

    }

    }

    

    return null;

}


commons-lang3에서 제공하는 기능을 사용하여 클래스 이름으로 객체를 생성하는 예제이다.


여기서 MY-BASE-PACKAGE를 인자로 사용하면 해당 Package를 포함하여 모든 클래스를 객체화 할 수 있다.