JDK的動態(tài)代理是基于接口的

package ?com.open.aop;
public ? interface ?BusinessInterface? {
????
public ? void ?processBusiness();
}
目標(biāo)對象
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(
"對象方法調(diào)用前");
????????
try?{
????????????obj?
=?method.invoke(delegate,?args);
????????}
?catch?(Exception?e)?{
????????}

????????System.out.println(
"對象方法調(diào)用后");?
????????
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();
????}

}
輸出結(jié)果
對象方法調(diào)用前
action
對象方法調(diào)用后