나 같은 경우 서브업무로 업무가 분리되어 있는 경우 업무를 처리하고 특정 Interface를 구현한 Class를 찾아서 후처리하는 기능 때문에 필요한 기능이었습니다.
추가적으로 찾은 Class에서 특정 Annotaion을 사용한 Method를 찾아서 실행하도록 하였습니다.
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
provider.addIncludeFilter(new AssignableTypeFilter(Interface명.class));Set components = provider.findCandidateComponents("Package명"); // co/kr/test형식
for (BeanDefinition component : components) {
Class<?> clazz = Class.forName(component.getBeanClassName());
logger.debug("Class Name : " + clazz.getName() );
Method[] methods = clazz.getMethods();
for (Method method : methods) {
if( method.isAnnotationPresent(PostApprove.class) ) {
logger.debug("Method Name : " + method.getName() );
PostApprove annotation = method.getAnnotation(Annotation명.class);
logger.debug("Annotation CODE : " + code + ", KEY : " + key );
if( Arrays.asList(annotation.code()).contains(code) ) {
String serviceValue = method.getDeclaringClass().getAnnotationsByType(Service.class)[0].value();
ApproveHelper helper = (ApproveHelper) context.getBean(serviceValue);
helper.postApprove(code, key);
}
}
}
}
'JAVA > Spring(eGovFrame)' 카테고리의 다른 글
Eclipse IDE 2020‑03 Properties Editor 사용 (0) | 2020.05.19 |
---|---|
MAVEN 프로젝트를 Gradle로 변경하기 (0) | 2019.09.27 |
[Spring] jar 파일 안에 있는 css 또는 javascript 사용하기 (0) | 2018.07.04 |
[Spring] RequestParam으로 배열 처리 (1) | 2018.06.19 |
[AOP] Data 저장 시 로그정보 남기기 - @Around (0) | 2018.05.11 |