2012-02-03 86 views
10

任何人都可以解释我需要做什么来实现我自己的注释,将添加功能到我的Web请求?如何将自定义注释添加到Spring MVC?

例如:

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

这里@RequiresSomeSpecialHandling将是我自己的批注,导致一些特殊的工作之前或给定Web请求/abc后完成。

我知道,在一个很高的水平,我需要写一个bean后置处理器,扫描类我的注释,并在必要时注入自定义MVC拦截器。但是有没有简化这项任务的捷径?特别是对于上面的两个例子。

由于提前,

+1

BTW:如果“@RequiresAuth”仅仅是一个例子,那么它是好的,但不要重新春季安全 – Ralph 2012-02-03 11:02:24

+0

这只是一个例子 - 编辑我的帖子让这个例子更通用。 – rustyx 2012-02-03 20:34:31

回答

2

取决于你想要做的@RequiresSomeSpecialHandling的结果是什么。例如。你想要它影响请求映射还是调用方法(即解析方法参数,处理返回值)?

在春季3.1注解类的支持变得更加个性化。您可以在this repo中浏览一些示例。

也请记住,在春季3.1的HandlerInterceptor可以投的处理对象HandlerMethod,使您可以访问到准确的方法,包括它的注解。这可能足以满足你需要做的事情。

4

这种注释,(即调用方法时添加额外的功能)看起来像触发AOP通知注解。

@see春Reference Chapter 7. Aspect Oriented Programming with Spring


的想法是使用注释来触发AOP建议。

喜欢:

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

谢谢。是的,AOP在我的列表中,但我想尝试进行注释并重新使用尽可能多的MVC功能。 – rustyx 2012-02-03 10:31:57

+0

@rustyx:是的,这是背后的思想:使用注释触发AOP建议,请参阅我的回答扩展来说明它。 – Ralph 2012-02-03 11:01:30

+0

我发现'@ annotation'在编写切入点表达式时很有用。 – 2012-02-03 16:01:52

-2

如果缓存是您的目标之一,看看在@Cacheable注释(和它的兄弟姐妹@CachePut@CacheEvict@Caching),可作为春季3.1。

+0

对不起,您的回答对我来说是无用的。在我的例子中,@NoCache注解是关于HTTP no-cache,而不是方法缓存的,它只是一个例子。 – rustyx 2012-02-03 20:37:48

相关问题