我知道使用Spring MVC可以使用RequestMapping注释来注释整个控制器类。也可以使用Requestmapping注释单独的方法,以便它们的每个请求映射都与整个类的请求映射相关。
如果那时我可以分配控制器的一个方法,作为某种类型的每个控制器过滤器,它会在给定方法的每个相应的动作方法之前执行。是否可能,或者我应该继续使用单独的Filter类的现有方法(这是我希望可以避免的事情)
答案 0 :(得分:1)
如果那时我可以分配一个控制器方法
那就太棒了
不,没有内置的方法来完成这项工作。
但你可以做一个非常脏黑客:在调用控制器方法之前执行一个用@ModelAttribute
注释的方法。
Spring Reference:Chapter 15.3.2.8 Providing a link to data from the model with @ModelAttribute
请注意
@ModelAttribute注释方法在选择之前执行 @RequestMapping带注释的处理程序方法。他们有效 使用经常加载的特定属性预填充隐式模型 来自数据库。然后可以访问这样的属性 通过@ModelAttribute注释处理程序方法参数 选择的处理程序方法,可能应用绑定和验证 它。
但我强烈建议不要这样做,而是使用AOP!
答案 1 :(得分:0)
上述解决方法可能会正常工作,但如果您想拦截方法调用,可能会在控制器或其他任何地方使用方面。
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html
寻找
aop:config或@Aspect
此外,对于控制器,拦截器可能会起作用
答案 2 :(得分:0)
听起来你只想对给定控制器内的方法应用一些通用逻辑(否则使用Filter)。如果是这样,为什么不将该逻辑放在私有方法中并从所有请求映射方法中调用它?这将为每个方法添加一行。将方面或拦截器应用于每个方法,无论如何都需要添加至少一行(例如注释)。吻。
答案 3 :(得分:0)
ModelAttribute的目的完全不同。 我们可以通过创建 MethodInterceptor 的自定义拦截器实现(来自 aopalliance )并将其用作 AOP顾问来实现。
在应用程序中为Request控制器类创建一个aop配置,并将其作为顾问程序添加到您为此控制器类创建的连接点。
然后在调用方法之前调用此顾问程序。