首页
随机
最近更改
特殊页面
社群首页
参数设置
关于WHY42
免责声明
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); } } </source> 然后定义代理类: <source lang="java"> 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:代理模式
。