아키텍처와 함께

블로그 이미지
by gregorio
  • Total hit
  • Today hit
  • Yesterday hit

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를 포함하여 모든 클래스를 객체화 할 수 있다.



'Java' 카테고리의 다른 글

JVM GC 설정  (0) 2018.06.07
Java Reflection 사용법  (0) 2018.04.12
JSP의 img, script에 jsessionid가 추가되는 경우  (0) 2018.02.22
Html a tag function call  (0) 2018.02.20
CDI를 이용한 Java 개발  (0) 2018.02.13
AND

ARTICLE CATEGORY

분류 전체보기 (56)
Spring Framrwork (33)
Linux (1)
APM (1)
Java (8)
python (0)
ant (1)
chart (1)
OS (1)
tomcat (1)
apache (1)
database (0)

RECENT ARTICLE

RECENT COMMENT

CALENDAR

«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

ARCHIVE

LINK