jdk 动态代理 发生了一个问题,求解答

以下是一段 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;

        }
    }
}

楼主你好,我测试是只会输出一次的,并且也只可能输出一次。