Spring AOP的设计与实现
Spring AOP使用的核心技术是动态代理,动态代理实际是JDK的一个特性,可以为任意java对象创建代理对象,这个特性是根据java反射来完成的。
java的Reflection包中的Proxy对象,
InvocationHandler接口
中介类被要求实现InvocationHandler接口,这个接口的定义如下
public interface InvocationHandler {
Object invoke(Object proxy, Method method, Object[] args);
}
InvocationHandler调用处理器
当我们调用代理类对象的方法时,这个“调用”会转送到invoke方法中,代理类对象作为proxy参数传入,参数method标识了我们具体调用的是代理类的哪个方法,args为这个方法的参数。
这样一来,我们对代理类中的所有方法的调用都会变为对invoke的调用,这样我们可以在invoke方法中添加统一的处理逻辑(也可以根据method参数对不同的代理类方法做不同的处理)。因此我们只需在中介类的invoke方法实现中输出“before”,然后调用委托类的invoke方法,再输出“after”。