package com.github.lianjiatech.retrofit.spring.boot.test.interceptor;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.github.lianjiatech.retrofit.spring.boot.interceptor.BasePathMatchInterceptor;
import com.github.lianjiatech.retrofit.spring.boot.interceptor.InterceptMark;

/**
 * 自动将注解上的参数值赋值到handleInterceptor实例上
 *
 * @author 陈添明
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@InterceptMark
public @interface EnumIntercept {

    EnvEnum envEnum();

    /**
     * 拦截器匹配路径
     *
     * @return 拦截器匹配路径
     */
    String[] include() default {"/**"};

    /**
     * 拦截器排除匹配，排除指定路径拦截
     *
     * @return 排除指定路径拦截
     */
    String[] exclude() default {};

    /**
     * 处理该注解的拦截器类 <br>
     * 优先从spring容器获取对应的Bean，如果获取不到，则使用反射创建一个！ <br>
     * 如果以Bean的形式配置，scope必须是prototype <br>
     *
     * @return 处理该注解的拦截器类
     */
    Class<? extends BasePathMatchInterceptor> handler() default EnumInterceptor.class;
}
