Java Reflect 활용하기
최종수정일: 2015.04.14
클래스의 정보 가져오기
Class<'Question'> clazz = Question.class;
//클래스출력
logger.debug("Class: "+clazz.getName());
//필드출력
Field[] fieldArray = clazz.getDeclaredFields();
for (Field field : fieldArray) {
logger.debug("Field: "+field.getName());
}
//생성자출력
Constructor[] constArray = clazz.getDeclaredConstructors();
for (Constructor constructor : constArray) {
logger.debug("Constructor: "+constructor.getName()+" \\ Parameter: "+constructor.getParameterCount());
}
//메서드출력
Method[] methodArray = clazz.getDeclaredMethods();
for (Method method : methodArray) {
logger.debug("Method: "+method.getName());
logger.debug("Parameter: "+method.getParameterCount());
}
클래스의 메서드 실행하기: 인자(arguments)가 없는경우
Class<'MyClass'> clazz = MyClass.class;
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
MyClass my = clazz.newInstance();
method.invoke(my);
}
Annotation을 활용하여 특정 메서드만 실행하기
Class<'MyClass'> clazz = MyClass.class;
Method[] annotMethods = clazz.getDeclaredMethods();
MyClass my = clazz.newInstance();
for (Method method : annotMethods) {
Annotation[] annotations = method.getDeclaredAnnotations();
for (Annotation annotation : annotations) {
//실행하고 싶은 어노테이션이 @MyAnnotation 일때
if(annotation.annotationType() == MyAnnotation.class) {
method.invoke(my);
}
}
}