@Interceptor、@Interceptors源码翻译

package javax.interceptor;

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

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

/**
 * 目的:注解一个类为拦截器
 * 
 * 

注解一个类为拦截器,例如: * @Interceptor * public class ValidationInterceptor { ... } * *

如果{@link javax.interceptor.Interceptors Interceptors}注解 * 或EJB部署描述符在与目标类相关的拦截器使用时,该注解是可选的。若果 * {@linkplain javax.interceptor.InterceptorBinding interceptor binding} * 被使用时,该注解是必须的。 * @author TCM * @create 2017年11月8日上午10:52:14 * @see javax.interceptor.Interceptors * @since Interceptors 1.1 */ @Retention(RUNTIME) @Target(TYPE) @Documented public @interface Interceptor { /** *

优先级定义了拦截器被调用的顺序。这些值与{@link javax.annotations.Priority Priority} * 注解一起使用。 * a. 平台规范定义的拦截器优先值范围是:PLATFORM_BEFORE到LIBRARY_BEFORE, * 或者从PLATFORM_AFTER开始。 * b. 扩展库定义的拦截器优先值范围是:LIBRARY_BEFORE到APPLICATION, * 或者LIBRARY_AFTER到PLATFORM_AFTER。 * c. 应用程序定义的拦截器优先值范围是:APPLICATION到LIBRARY_AFTER。 * *

一个拦截器,它必须在另一个定义的拦截器之前或之后调用。其优先级可以选择任何适当的值。 * *

具有较小优先值的拦截器首先被调用。如果不止一个拦截器有相同的优先级,这些拦截器顺序未定义。 * *

例如,扩展库定义拦截器是这样的: * @Priority(Interceptor.Priority.LIBRARY_BEFORE+10) * @Interceptor * public class ValidationInterceptor { ... } * @since Interceptors 1.2 */ public static class Priority { private Priority() { } // 不允许实例化 //平台规范定义的拦截器,优先级的范围开始 public static final int PLATFORM_BEFORE = 0; //扩展库定义的拦截器,优先级的范围开始 public static final int LIBRARY_BEFORE = 1000; //应用程序定义的拦截器,优先级的范围开始 public static final int APPLICATION = 2000; //扩展库定义的拦截器,优先级的范围结束 public static final int LIBRARY_AFTER = 3000; //应用程序定义的拦截器,优先级的范围结束 public static final int PLATFORM_AFTER = 4000; } }

package javax.interceptor;

import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;

import java.lang.annotation.Target;
import java.lang.annotation.Retention;

/**
 * 目的:创建一个拦截器列表
 * 
 * 

为目标类、目标类的方法或构造函数声明一个有序的拦截器列表。如下: * @Interceptors(ValidationInterceptor.class) * public class Order { ... } * * @Interceptors({ValidationInterceptor.class, * SecurityInterceptor.class}) * public void updateOrder(Order order) { ... } * *

仅业务方法拦截或超时方法拦截,需通过方法级别的拦截器声明来指定。 * *

构造函数拦截需一个构造器级别的拦截器声明来指定。 * @author TCM * @create 2017年11月9日下午2:36:57 * @see javax.interceptor.ExcludeClassInterceptors * @see javax.interceptor.ExcludeDefaultInterceptors * @since Interceptors 1.0 */ @Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR}) @Retention(RetentionPolicy.RUNTIME) public @interface Interceptors { //拦截器有序列表 Class[] value(); }


你可能感兴趣的:(javaEE)