Spring MVC의 RequestMapping 정보 가져오기.
Java/Spring2010. 3. 25. 09:05
간단한 Url Logger를 작성 하기 위해서, 해당 url에 대한 @RequestMapping에 url값이 필요했다.
구글링을 해서 찾아봤었는데.. http://lizdouglass.wordpress.com/2009/12/16/adding-a-spring-aspect/
여튼..
@Before aspect로 할 경우 Joinpoint에서 getClass 한 후
여기서 getMethods[] 한다. 메서드 들 중에서 방금 호출한 메서드를 가져오고
가져온 메서드와 호출한 메서드 정보가 일치 하면 그 메서드에서 어노테이션 정보를 가져오고
어노테이션 정보에서(대부분 url을 첫번째 값이니) 첫번째 값을 가져온다.
@Before(value="execution(* net.study.spring.controller.WelcomeController.index())")
public void doBeforeProfiling( JoinPoint jp) throws SQLException
{
UrlLogger urlLogger = new UrlLogger();
Method[] methods = jp.getTarget().getClass().getMethods();
for ( Method method : methods) {
if ( method.getName().equals( jp.getSignature().getName()))
{
String[] values = method.getAnnotation( RequestMapping.class).value();
urlLogger.setTargetUrl( values[0]);
}
}
urlLoggerDAO.insert( urlLogger);
}
public void doBeforeProfiling( JoinPoint jp) throws SQLException
{
UrlLogger urlLogger = new UrlLogger();
Method[] methods = jp.getTarget().getClass().getMethods();
for ( Method method : methods) {
if ( method.getName().equals( jp.getSignature().getName()))
{
String[] values = method.getAnnotation( RequestMapping.class).value();
urlLogger.setTargetUrl( values[0]);
}
}
urlLoggerDAO.insert( urlLogger);
}
더 낳은 방법도 있을 것 같은데..
토비님 책 나오면 다시한번 집중하고 봐야겠다.
추가로..
aspect표현식을 수정 하면. 아래 한줄임!! ..;
@Before(value="execution(* net.study.spring.bbs.controller.*.*(..)) && @annotation(org.springframework.web.bind.annotation.RequestMapping)")
이렇게 된다. controller클래스에 있는 모든 메서드에 걸긴 거는데 거기서 @annotation이 RequestMapping인 것만!!
왜냐.. url로깅이기 때문에 @_@
만약 dao관련 로깅을 하고 싶다면..@Transactional을 하면 되겠죵!!