/* 这个接口代表一个通用的拦截器。* 通用拦截器能够拦挡在根底程序中产生的运行时事件。这些工夫具体化为 Joinpint(连接点)。运行时连接点能够是调用、字段拜访、异样等等。* 这个接口通常不会间接应用。用子接口拦挡具体的事件。例如,上面的类实现了具体的拦截器来实现调试器。* class DebuggingInterceptor implements MethodInterceptor,
* ConstructorInterceptor {
*
* Object invoke(MethodInvocation i) throws Throwable {* debug(i.getMethod(), i.getThis(), i.getArgs());
* return i.proceed();
* }
*
* Object construct(ConstructorInvocation i) throws Throwable {* debug(i.getConstructor(), i.getThis(), i.getArgs());
* return i.proceed();
* }
*
* void debug(AccessibleObject ao, Object this, Object value) {
* ...
* }
* }
public interface Interceptor extends Advice { }
/* 在接口达到指标的途中拦挡接口上的调用。它们嵌套在指标的“顶部”。用户应该实现 invoke(MethodInvacation) 办法,来批改原来的行为。一下的类 实现了一个跟踪拦截器
* class TracingInterceptor implements MethodInterceptor {* Object invoke(MethodInvocation i) throws Throwable {* System.out.println("method"+i.getMethod()+"is called on"+
* i.getThis()+"with args"+i.getArguments());
* Object ret=i.proceed();
* System.out.println("method"+i.getMethod()+"returns"+ret);
* return ret;
* }
* }
@FunctionalInterface
public interface MethodInterceptor extends Interceptor {
@Nullable
Object invoke(@Nonnull MethodInvocation invocation) throws Throwable;
}