2012-02-03 2 views
10

내 웹 요청에 기능을 추가하는 내 자신의 주석을 구현하기 위해 내가해야 할 일을 설명 할 수 있습니까? 예를 들어Spring MVC에 커스터마이징 어노테이션을 추가하는 방법은 무엇입니까?

:

여기
@Controller 
public class MyController { 
    @RequestMapping("/abc") 
    @RequiresSomeSpecialHandling 
    public void handleSecureRequest() { 
    } 
} 

@RequiresSomeSpecialHandling가 특별한 작업을하기 전에, 또는 지정된 웹 요청 /abc 후에 수행되도록 내 자신의 주석 것입니다.

매우 높은 수준에서 bean post processor를 작성하고, 주석을위한 클래스를 스캔하고, 필요할 때 custom mvc 인터셉터를 주입해야한다는 것을 알고 있습니다. 그러나이 작업을 단순화하는 단축키가 있습니까? 특히 위의 두 가지 예에 대해서. 사전에

감사합니다,

+1

BTW : "@RequiresAuth"가 하나의 예일 뿐이라면 좋지만 스프링 보안을 재발 명하지 마십시오. – Ralph

+0

예일뿐입니다. 예제를 좀 더 일반적인 것으로 수정했습니다. – rustyx

답변

2

@RequiresSomeSpecialHandling의 결과에 따라 원하는 결과에 따라 다릅니다. 예 : 요청 매핑이나 메서드 호출 (즉, 메서드 인수를 확인하고 반환 값을 처리)에 영향을 미치시겠습니까?

스프링 3.1의 주석이 달린 클래스에 대한 지원은 훨씬 더 커스터마이징이 가능해졌습니다. this repo에서 몇 가지 예를 찾아 볼 수 있습니다.

Spring 3.1의 HandlerInterceptor는 핸들러 객체를 HandlerMethod로 형변환 할 수 있으므로 주석을 포함한 정확한 메소드에 액세스 할 수 있습니다. 그게 네가해야 할 일에 충분할거야.

4

주석의이 종류는, (메소드를 호출 할 때 그 기능을 추가)을 AOP 조언을 트리거 주석처럼 보인다.

@see의 봄 Reference Chapter 7. Aspect Oriented Programming with Spring


아이디어는 AOP 조언을 트리거하기 위해 주석을 사용하는 것입니다.

좋아 : 캐싱이 @Cacheable 주석 (및 형제 자매 @CachePut, @CacheEvict@Caching) 스프링 3.1로 사용할 수, 살펴보고, 목표 중 하나입니다

@Pointcut("@target(com.example.RequiresAuth)") 
+0

감사합니다. 네, AOP가 제 목록에 있습니다.하지만 주석을 작성하고 최대한 많은 MVC 기능을 재사용하려고합니다. – rustyx

+0

@rustyx : 그렇습니다. 그 아이디어가 뒤에있었습니다. 주석을 사용하여 AOP Advice를 실행하십시오. 확장 된 대답을 참조하십시오. – Ralph

+0

'@ annotation'은 pointcut 표현식 작성에 유용합니다. –

-2

합니다.

+0

죄송합니다, 당신의 대답은 쓸모가 없습니다. 예제에서 @NoCache 주석은 HTTP 캐시가 아니라 메소드 캐시에 관한 것이 었습니다. 어쨌든 예제였습니다. – rustyx

관련 문제