以下是一段 jdk 动态代理测试代码,按理说只会输出一次 "after m2()",但实际输出了3次。求解答
package com.gunma.report;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @author zhikuodai
* @date 2019-06-13 16:32
*/
public class AopTest {
public interface I {
void m();
}
public static void main(String[] args) {
I i = new ISub();
I proxy = (I) Proxy.newProxyInstance(
i.getClass().getClassLoader(),
i.getClass().getInterfaces(),
new AfterHandler(i));
proxy.m();
}
private static class ISub implements I {
@Override
public void m() {
System.out.println("method m()");
}
}
private static class AfterHandler implements InvocationHandler {
private final I i;
public AfterHandler(I i) {
this.i = i;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args1) throws Throwable {
Object result = method.invoke(i, args1);
System.out.println("after m2()");
return result;
}
}
}
楼主你好,我测试是只会输出一次的,并且也只可能输出一次。