我使用
制作了一个自定义注释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() {........
有人可以建议。
答案 0 :(得分:0)
您有两种选择以通用方式实现它:
使用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
}
}
}