当前位置: 首页 > 工具软件 > Alliance > 使用案例 >

Spring API中的aopalliance和commons

柴英锐
2023-12-01

aopalliance

Advice

public interface Advice();
  • Advice接口标志
  • 可以是任何Advice类型的实现.比如拦截器

ConstructorInterceptor

public interface ConstructorInterceptor extends Interceptor

  • 拦截新对象的构造:
 class DebuggingInterceptor implements ConstructorInterceptor {
   Object instance=null;

   Object construct(ConstructorInvocation i) throws Throwable {
     if(instance==null) {
       return instance=i.proceed();
     } else {
       throw new Exception("singleton does not allow multiple instance");
     }
   }
 }
construct
/**
 * 实现这个接口方法可以在构造新对象之前或者构造新对象之后进行额外的操作
 * 建议通过调用Joinpoint.proceed()方法实现
 * 
 * @param invocation 构造器的joinpoint
 * @return 最新创建的对象,也可以是调用Joinpoint.proceed()方法的结果(可能会被拦截器替代)
 * @throws 拦截器或目标对象抛出的异常
 */
Object construct(ConstructorInvocation invocation);
  • 通过实现这个接口方法可以在构造新对象之前或者构造新对象之后进行额外的操作

ConstructorInvocation

public interface ConstructorInvocation extends Invocation

  • 构造函数调用的描述,在构造函数调用时提供给拦截器
  • 构造函数调用是一个joinpoint, 可以被构造函数拦截器拦截
getConstructor
/**
 * 获取正在被调用的构造器
 * 推荐使用Joinpoint.getStaticpart()方法实现 
 * 
 * @return 正在被调用的构造器
 */
Constructor<?> getConstructor();
  • 获取正在被调用的构造器

Interceptor

public interface Interceptor extends Advice

  • 这个接口表示一个通用的拦截器
 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) {
     ...
   }
 }

Invocation

public interface Invocation extends Joinpoint

  • 该接口表示程序中的调用
  • 调用是指可以被拦截器拦截的joinpoint
getArguments
/**
 * 获取参数作为一个数组对象
 * 可以通过更改此数组中的元素值以更改参数
 * 
 * @return 调用中的参数
 */
Object[] getArguments();
  • 获取参数作为一个数组对象

JoinPoint

public interface Joinpoint

  • 该接口表示一个通用的运行时的joinpoint . joinpoint是一个AOP术语
    • 运行时joinpoint是发生在静态joinpoint的一个事件:比如调用就是一个发生在方法(静态joinpoint)时的运行时joinpoint
  • 在拦截器框架的中,一个运行时的joinpoint指代一个对可访问对象(方法,构造器,属性)的访问,被用来传递给静态joinpoint(方法)中的拦截器
getStaticPart
/**
 * 获取当前joinpoint的静态部分
 * 静态部分是指一个链式拦截器中可访问的对象
 * 
 * @return 当前joinpoint的静态部分
 */
Object getStaticPart();
  • 获取当前joinpoint的静态部分
getThis
/**
 * 获取包含当前joinpoint静态部分的对象
 * 比如一个调用的目标对象
 * 
 * @return 如果可访问的对象是静态的返回值可以为空
 */
Object getThis();
  • 获取包含当前joinpoint静态部分的对象
proceed
/**
 * 继续进行到链表中的下一个拦截器
 * 此方法的实现和语义取决于实际joinpoint的类型
 * 
 * @return 子接口中的定义
 * @throws joinpoint抛出的异常
 */
Object proceed();
  • 继续进行到链表中的下一个拦截器

MethodInterceptor

@FunctionalInterface
public interface MethodInterceptor extends Interceptor

  • 拦截器在到达目标时调用一个接口,这些拦截器嵌套在目标的顶部
  • 自定义实现内部的invoke(MethodInvocation i) 方法来修改默认的行为
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;
   }
 }
invoke
/**
 * 实现这个接口方法可以在构造新对象之前或者构造新对象之后进行额外的操作
 * 建议通过调用Joinpoint.proceed()方法实现
 * 
 * @param invocation 方法调用的joinpoint
 * @return 调用的Joinpoint.proceed()的结果,可能被拦截器拦截
 * @throws 拦截器或者目标对象抛出的异常
 */
Object invoke(MethodInvocation invocation);
  • 通过实现此方法可以在调用发生前和发生后进行额外的处理

MethodInvocation

public interface MethodInvocation extends Invocation

  • 方法调用的描述,在方法调用时传递给拦截器
  • 方法调用是指一个可能会被方法拦截器拦截的joinpoint
getMethod()
/**
 * 获取正在被调用的方法
 * 这个方法是Joinpoint.getStaticPart()方法的友好实现
 * 
 * @return 正在被调用的方法 
 */
Method getMethod();
  • 获取正在被调用的方法

commons

Log

public interface Log

  • 一个简单的日志接口包含抽象日志API.
  • 为了可以通过LogFactory成功进行实例化,实现此接口的类必须具有一个构造函数,该构造函数采用单个String参数表示此Log的名称
  • 依序排列的六个日志等级:
    • trace (最不严重的等级)
    • debug
    • info
    • warn
    • error
    • fatal (最严重等级)
trace
/**
 * 使用trace日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void trace(Object message);

/**
 * 使用trace日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生trace日志的原因 
 */
void trace(Object message, Throwable t);
debug
/**
 * 使用debug日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void debug(Object message);

/**
 * 使用debug日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生debug日志的原因 
 */
void debug(Object message, Throwable t);
info
/**
 * 使用info日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void info(Object message);

/**
 * 使用info日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生info日志的原因 
 */
void info(Object message, Throwable t);
warn
/**
 * 使用warn日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void warn(Object message);

/**
 * 使用warn日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生warn日志的原因 
 */
void warn(Object message, Throwable t);
error
/**
 * 使用error日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void error(Object message);

/**
 * 使用error日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生error日志的原因 
 */
void error(Object message, Throwable t);
fatal
/**
 * 使用fatal日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void fatal(Object message);

/**
 * 使用fatal日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生fatal日志的原因 
 */
void fatal(Object message, Throwable t);
isTraceEnabled
/**
 * 当前是否启用info等级日志记录
 * 调用此方法可以防止当日志等级超过info级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了info等级则为true 
 */
boolean	isTraceEnabled();
  • 当前是否启用trace等级日志记录
isDebugEnabled
/**
 * 当前是否启用debug等级日志记录
 * 调用此方法可以防止当日志等级超过debug级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了debug等级则为true 
 */
boolean	isDebugEnabled();
  • 当前是否启用debug等级日志记录
isInfoEnabled
/**
 * 当前是否启用info等级日志记录
 * 调用此方法可以防止当日志等级超过info级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了info等级则为true 
 */
boolean	isInfoEnabled();
  • 当前是否启用info等级日志记录
isWarnEnabled
/**
 * 当前是否启用warn等级日志记录
 * 调用此方法可以防止当日志等级超过warn级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了warn等级则为true 
 */
boolean	isWarnEnabled();
  • 当前是否启用warn等级日志记录
isErrorEnabled
/**
 * 当前是否启用error等级日志记录
 * 调用此方法可以防止当日志等级超过error级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了error等级则为true 
 */
boolean	isErrorEnabled();
  • 当前是否启用error等级日志记录
isFatalEnabled
/**
 * 当前是否启用fatal等级日志记录
 * 调用此方法可以防止当日志等级超过fatal级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了fatal等级则为true 
 */
boolean	isFatalEnabled();
  • 当前是否启用fatal等级日志记录

LogFactory

public abstract class LogFactory extends Object

  • LogFactory是一个最小化的Apache Commons LoggingLogFactory API, 仅仅提供常用的日志查找方法
getLog
/**
 * 返回一个已经命名的日志记录器
 * 
 * @param clazz 包含从日志名称派生的类
 */
static Log	getLog(Class<?> clazz)

/**
 * 返回一个已经命名的日志记录器
 * 
 * @param name 返回的日志实例的逻辑名称
 */
static Log	getLog(String name)

NoOpLog

public class NoOpLog extends Object implements Log, Serializable

  • 丢弃日志的所有消息记录
trace
/**
 * 使用trace日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void trace(Object message);

/**
 * 使用trace日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生trace日志的原因 
 */
void trace(Object message, Throwable t);
debug
/**
 * 使用debug日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void debug(Object message);

/**
 * 使用debug日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生debug日志的原因 
 */
void debug(Object message, Throwable t);
info
/**
 * 使用info日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void info(Object message);

/**
 * 使用info日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生info日志的原因 
 */
void info(Object message, Throwable t);
warn
/**
 * 使用warn日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void warn(Object message);

/**
 * 使用warn日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生warn日志的原因 
 */
void warn(Object message, Throwable t);
error
/**
 * 使用error日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void error(Object message);

/**
 * 使用error日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生error日志的原因 
 */
void error(Object message, Throwable t);
fatal
/**
 * 使用fatal日志级别记录日志的消息
 * 
 * @param message 日志的消息 
 */
void fatal(Object message);

/**
 * 使用fatal日志级别记录日志的消息
 * 
 * @param message 日志的消息
 * @param t 产生fatal日志的原因 
 */
void fatal(Object message, Throwable t);
isTraceEnabled
/**
 * 当前是否启用trace等级日志记录
 * 调用此方法可以防止当日志等级超过trace级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了trace等级则为true 
 */
boolean	isTraceEnabled();
  • 当前是否启用trace等级日志记录
isDebugEnabled
/**
 * 当前是否启用debug等级日志记录
 * 调用此方法可以防止当日志等级超过debug级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了debug等级则为true 
 */
boolean	isDebugEnabled();
  • 当前是否启用debug等级日志记录
isInfoEnabled
/**
 * 当前是否启用info等级日志记录
 * 调用此方法可以防止当日志等级超过info级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了info等级则为true 
 */
boolean	isInfoEnabled();
  • 当前是否启用info等级日志记录
isWarnEnabled
/**
 * 当前是否启用warn等级日志记录
 * 调用此方法可以防止当日志等级超过warn级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了warn等级则为true 
 */
boolean	isWarnEnabled();
  • 当前是否启用warn等级日志记录
isErrorEnabled
/**
 * 当前是否启用error等级日志记录
 * 调用此方法可以防止当日志等级超过error级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了error等级则为true 
 */
boolean	isErrorEnabled();
  • 当前是否启用error等级日志记录
isFatalEnabled
/**
 * 当前是否启用fatal等级日志记录
 * 调用此方法可以防止当日志等级超过fatal级别时执行更严重的操作
 * 
 * @return 如果基础日志中启动了fatal等级则为true 
 */
boolean	isFatalEnabled()
  • 当前是否启用fatal等级日志记录
 类似资料: