跳转到内容
主菜单
主菜单
移至侧栏
隐藏
规范/协议
协议
算法
JVM
多线程/并发
存储
AI
深度学习
工具箱
最近更改
文章分类
全部文章
WHY42
搜索
搜索
外观
登录
个人工具
登录
欢迎来到Riguz的小站!这是一个私人wiki,用来记录一些我的笔记。
查看“︁Java:代理模式”︁的源代码
页面
讨论
大陆简体
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
常规
链入页面
相关更改
页面信息
外观
移至侧栏
隐藏
←
Java:代理模式
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
=静态代理= Java代理模式是很有用的模式,之前阿里的面试官问我AOP是怎么实现的,说了半天没说清楚,后来才发现原来叫代理模式...代理模式的核心思想是,在方法外面再包装一层,这样执行的时候,当然可以在实际执行的方法前面和后面加别的函数了... 首先要定义一个接口: <source lang="java"> interface Handler{ public void handle(); } </source> 然后这个接口有个实现,就略了;关键是还要加一个代理实现: <source lang="java"> class Proxy implements Handler{ HandlerImpl impl = new HandlerImpl(); @Override public void handle(){ //before this.impl.handle(); //after } } </source> 这样实际在使用的过程中,用这个代理而不是直接的实现,就可以在handle处理前后做一些文章了。 =动态代理= JDK提供了Proxy接口可以用来实现动态代理,以下是一个例子: <source lang="java"> public interface Handler { public void handle(String param); } public class DefaultHandler implements Handler{ @Override public void handle(String param) { System.out.println("Handling=>" + param); } } import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class DynamicHandlerProxy implements InvocationHandler{ private Object target; public Object bind(Object target){ this.target = target; return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(proxy.getClass()); Object result = null; this.before(); result = method.invoke(target, args); this.after(); return result; } public void before(){ System.out.println("----before----"); } public void after(){ System.out.println("----after----"); } } ... DynamicHandlerProxy proxy1 = new DynamicHandlerProxy(); Handler handler = (Handler) proxy1.bind(new DefaultHandler()); handler.handle("My name is Han Meimei!"); </source> =Cglib动态代理= [[Category:Programe]]
返回
Java:代理模式
。
搜索
搜索
查看“︁Java:代理模式”︁的源代码
添加话题