在上一篇动态代理中,我们了解到动态代理可增加代码的复用性。这篇博客将讲述动态代理的又一个实际应用,面向切片编程。我们先通过图解来了解什么面向切片。
从图中我们可以看出,我们希望回调目标对象的方法可以是动态切换的,这可以生动地描述为从老的逻辑代码中切入一些新的逻辑代码,即AOP。
class EatableUtil{
public void method1(){
System.out.println("Invoking method1.");
}
public void method2() {
System.out.println("Invoking method2.");
}
}
class ActualInvocationHandler implements InvocationHandler{
private Object object;
public void bind(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
EatableUtil eatableUtil = new EatableUtil();
//Invoking method1
eatableUtil.method1();
//This method can contain any logic.
Object returValue = method.invoke(this.object, args);
//Invoking method2
eatableUtil.method2();
return returValue;
}
以上代码承接上一篇的动态代理代码。
输出:
Invoking method1.
Directly eat.
Invoking method2.
Invoking method1.
Producing Nike cloth.
Invoking method2.