0

を使用して1つのカスタム注釈を作成しました

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() {........

誰か提案してください。

4

1 に答える 1

0

これを一般的な方法で実装するには、実際には2つのオプションがあります。

  1. インターセプター
  2. AOP

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
        }
    }
}
于 2013-01-12T19:23:51.353 に答える