打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java动态代理 AOP封装 张孝祥

public static void main(String[] args) {

List<String> list = new ArrayList<>();
List proxy = (List)getProxy(list, new MyAdvice());
System.out.println("代理类:"+proxy.getClass());
proxy.add("元素1");

}

public static Object getProxy(final Object target, final AdviceInterface advice){
Object proxy = Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 方案一:直接在代理里写日志追踪
// System.out.println(method.getName()+"方法开始");
// Object returnValue = method.invoke(target,args);
// System.out.println(method.getName()+"方法结束");

// 方案二:通过写一个类,将追踪的方法封装在类里,
// 代理中调用方法(即模板,以后改业务内容时就不用改代理里的代码了)
advice.beforeMethod(method);
Object returnValue = method.invoke(target, args);
advice.afterMethod(method);
return returnValue;
}
});
return proxy;

}

总结:这类模式的理念是,把功能抽取成为一个对象,(即把对象传进来,使用这个对象调用它里面的方法)。

由于要调用对象,但又不知道对象的名字,所以通过接口来约定。(即,我知道你一定实现这个接口,我调用这个接口的名字就可以了)。这叫通行的契约。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
代理模式之Java动态代理
java的动态代理机制详解 - xiaoluo501395377 - 博客园
java 代理模式实现:java原生proxy类和增强型cglib库
动态代理如何实现?Jdk代理和CGLib区别?
代理模式
Spring框架中的AOP思想动态代理模式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服