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 |