JDK的动态代理是基于接口的

package  com.open.aop;
public   interface  BusinessInterface  {
    
public   void  processBusiness();
}
目标对象
package com.open.aop;
public class BusinessObject implements BusinessInterface {
    
public void processBusiness() {
        System.out.println(
"action");
    }

}

代理对象
package com.open.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class LogHandler implements InvocationHandler {
    
private Object delegate;
    
public Object binder(Object delegate) {
        
this.delegate=delegate;
        
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
                delegate.getClass().getInterfaces(),
this);
    }

    
public Object invoke(Object proxy, Method method, Object[] args)
            
throws Throwable {
        Object obj 
= null;
        System.out.println(
"对象方法调用前");
        
try {
            obj 
= method.invoke(delegate, args);
        }
 catch (Exception e) {
        }

        System.out.println(
"对象方法调用后"); 
        
return obj;
    }

}
测试类
package com.open.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {
    
public static void main(String[] args) {
        BusinessInterface bi 
= (BusinessInterface) new LogHandler()
                .binder(
new BusinessObject());
        bi.processBusiness();
    }

}
输出结果
对象方法调用前
action
对象方法调用后