2016-12-28 4 views
0

Spring Boot Appのインターセプタを有効にするために、カスタマイズ可能な注釈を書くことは可能ですか?Springブートアプリケーションでカスタムインターセプトアノテーションを作成するにはどうすればよいですか?

これは私のコード、

設定

@Configuration 
public class CustomConfig extends WebMvcConfigurerAdapter { 

    @Autowired 
    CustomInterceptor interceptor; 

    @Override 
     public void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(interceptor); 
    } 

} 

インターセプタ

@Component 
public class CustomInterceptor implements HandlerInterceptor { 

    @Override 
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) 
      throws Exception { 

     System.err.println("Executed!!!afterCompletion"); 

    } 

    @Override 
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) 
      throws Exception { 
     System.err.println("Executed!!!postHandle"); 

    } 

    @Override 
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { 
     // TODO Auto-generated method stub 
     return true; 
    } 

} 

カスタム注釈

です私はこの注釈

@EnableCustomConfig

@SpringBootApplication 
@EnableAutoConfiguration 
@EnableCustomConfig 
public class CustomEnableApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(CustomEnableApplication.class, args); 
    } 
} 

は春に達成することが可能。これは、メインクラスに存在している場合にのみ、このインタセプタを有効にする

@Documented 
@Retention(RUNTIME) 
@Target(TYPE) 
@Import(CustomConfig.class) 
public @interface EnableCustomConfig { 

} 

ブート?はいの場合は、どうか教えてください。

+0

私の例はあなたの質問に答えましたか? –

答えて

1

ここにはいくつかのオプションがあります。まず、注釈を完全にスキップすると思います。あなたは、アノテーションを使用して設定している場合

@Autowired 
private ApplicationContext applicationContext; 

@Override 
public void addInterceptors(InterceptorRegistry registry) { 
    Map<String, CustomInterceptor> interceptors = applicationContext.getBeansOfType(CustomInterceptor.class); 
    for(CustomInterceptor interceptor : interceptors.values()){ 
      registry.addInterceptor(interceptor); 
    } 
} 

public CustomInterceptor extends HandlerInterceptor {} 

をご希望のインターセプタは、このインタフェースを実装し、春の豆は、このインタフェースを実装するかを決定するためにApplicationContextを使用している:あなたは、単にインターフェイスを拡張することができ基本的には上記と同じロジックを使用することができます。 HandlerInterceptorインターフェイスを実装するすべてのBeanを取得し、アノテーションを確認します。 Beanの注釈を次のように確認できます。

public boolean isAnnotatedWithMyAnnotation(Class clazz){ 
    return clazz.getAnnotation(EnableCustomConfig.class) == null ? false : true; 
} 
+0

私は最初のアプローチに感謝しました! – Umar

関連する問題