spring mvc에서 서비스(@Service)의 메서드에 적용되어 있는 어노테이션을 가져오는 방법


안녕하세요.

public class DataSourceRoutingInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HandlerMethod method = (HandlerMethod) handler;
        ReadOnly readOnly = method.getMethodAnnotation(ReadOnly.class);
        readOnly = (readOnly == null) ? method.getBeanType().getAnnotation(ReadOnly.class) : readOnly;

        // do something

        return true;
    }
}

위 코드는 컨트롤러의 메서드에 적용된 어노테이션을 가져오는 코드로 알고 있습니다. 그런데 서비스에 적용된 어노테이션은 어떻게 접근해야 하는지 감을 못잡겠네요.

@Service
public class ExampleService {
    @Autowired
    private ExampleDao exampleDao;

    @ReadOnly
    public SheetResponseObject getUserList(ExampleParam param) {
        SheetResponseObject responseObject = new SheetResponseObject();
        responseObject.setTotal(exampleDao.getUserListCount());
        responseObject.setData(exampleDao.getUserList(param));
        return responseObject;
    }
}

바로 요 메서드에 @ReadOnly 어노테이션이 있나 없나 확인하고 싶어요. 스프링은 4.3 쓰고 있습니다.


조회수 50


1 답변


좋아요
1
싫어요
채택취소하기

서비스 인스턴스를 사용할 때 검사하면됩니다.

Object service = ... ; // Service 인스턴스이고, ExampleService 인스턴스 일때,

Method m = service.getClass().getMethod("getUserList",ExampleParam.class);
// java.reflect.Method

ReadOnly readOnly = m.getAnnotation(ReadOnly.class);

...

기본적으로 위와 같이 하면됩니다.

  • 2016년 11월 25일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close