package javax.interceptor;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
/**
* 目的:注解一个拦截器方法
*
* <p>定义一个插入业务方法上的拦截器方法。该方法具有以下特点:
* a. 非final、非static;
* b. 单参数{@link javax.interceptor.InvocationContext}
* c. 返回类型Object类(如:目标类(或超类)、拦截器类)
* 如下所示:
* @AroundInvoke
* public Object intercept(InvocationContext ctx)
* throws Exception { ... }
*
* <p>一个类不能声明多个AroundInvoke方法。
*
* <p>一个正在拦截的AroundInvoke方法可以调用任何组件或资源。
*
* <p>注解AroundInvoke方法的调用与业务方法在相同的事务和安全上下文中发生。
*
* <p>AroundInvoke方法可能抛出该方法的throws子句中的的任何异常。
* 注解的方法可能会捕获和压制异常,并通过调用InvocationContext.proceed()来恢复。
* @author TCM
* @create 2017年11月10日上午11:09:52
* @since Interceptors 1.0
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AroundInvoke {
}
package javax.interceptor;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
/**
* 目的:定义一个拦截器的超时方法
*
* <p>定义了一个拦截器方法,该方法在超时方法上进行交互。注解在任何非final、非static,
* 一个参数类型javax.interceptor.InvocationContext,和返回类型目标类
* (或超类)或任何拦截类的对象。例如:
* @AroundTimeout
* public Object interceptTimeout(InvocationContext ctx)
* throws Exception { ... }
*
* <p>一个类不能声明多个AroundTimeout方法。
*
* <p>AroundTimeout能调用任何组件或资源对应的超时方法。
*
* <p>{@link javax.interceptor.InvocationContext#getTimer()}
* 允许使用任何AroundTimeout方法检索与超时相关的计时器对象。
*
* <p>在同一事务和安全上下文中,注解AroundTimeout方法作为超时方法被调用。
*
* <p>AroundTimeout方法可能抛出该方法的throws子句中的的任何异常。
* 注解的方法可能会捕获和压制异常,并通过调用InvocationContext.proceed()来恢复。
* @author TCM
* @create 2017年11月10日下午1:44:54
* @since Interceptors 1.1
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AroundTimeout {
}
package javax.interceptor;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* 目的:目标类初始化后,回调被@AroundConstruct注解的方法
*
* <p>目标类构造函数被调用时,在回调@AroundConstruct注解的方法。
*
* <p>该注解所应用的方法,必须具备下列条件之一:
* @AroundConstruct
* public void <METHOD>(InvocationContext ctx) { ... }
*
* @AroundConstruct
* public Object <METHOD>(InvocationContext ctx) throws Exception { ... }
*
* <p>AroundConstruct拦截方法仅在拦截器类中声明。
*
* <p>拦截类中不能声明多个AroundConstruct方法。
*
* <p>AroundConstruct方法运行时抛出异常,并没有检查异常。
*
* <p>目标实例被创建和执行构造函数注入,如果适用,在AroundConstruct拦截器链中的最后一个拦截器方法
* 去调用{@link javax.interceptor.InvocationContext#proceed()}方法。
*
* <p>一个AroundConstruct拦截器方法应该小心访问它所插入的构造函数实例。
* @author TCM
* @create 2017年11月13日下午1:46:51
* @since Interceptors 1.2
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AroundConstruct {
}