Spring MVC Custom Annotation实现

时间:2013-01-11 18:38:19

标签: spring-mvc custom-component

我使用

制作了一个自定义注释
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping .

它工作正常,有时它看起来很昂贵,因为所有方法调用,控制转到Annotation实现类。 我希望控件只针对那些声明了自定义注释的方法转到实现类。有人可以告诉我如何实现这一目标。 我这样做了。

web.xml中的

: -

<context-param>
 <param-name>contextClass</param-name>
 <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>

在controller.xml中: -

<bean id="myInterceptor" class="com.common.annotation.MyInterceptor"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">  
 <property name="interceptors">  
    <list>  
         <ref bean="myInterceptor"/>  
     </list>  
 </property>  
</bean> 

在Annotaion课程中: -

@Target({ElementType.METHOD,ElementType.ANNOTATION_TYPE})  
@Retention(RetentionPolicy.RUNTIME)  
public @interface MyAnnotation {  
        boolean checkAuth() default true;  
    } 

将其用作: -

@RequestMapping(value = "/user", method = RequestMethod.GET)
    @MyAnnotation(checkAuth=true)
    public ModelAndView forUser() {........

有人可以建议。

1 个答案:

答案 0 :(得分:0)

您有两种选择以通用方式实现它:

  1. 拦截
  2. AOP
  3. 使用AOP,您可以使用指定注释的切入点,并创建包含逻辑的建议。如果使用Spring AOP,则只会扩展带注释的方法。

    这样的事情:

    @Aspect
    class MyAnnotationAspect {
        @Around(value="@annotation(org.sample.MyAnnotation)")
        public Object display(ProceedingJoinPoint joinPoint, MyAnnotation myAnnotation ) throws Throwable {
            if(myAnnotation.checkUser()) {
                // Auth logic goes here
            }
        }
    }