动态代理代码示例
来源:互联网 发布:erp沙盘软件 编辑:程序博客网 时间:2024/05/21 11:08
11320171026
实现动态代理的两种方式:
1、JDK:目标类强制实现某个接口【反射】
2、cglib:目标类可以不必实现接口【字节码,效率高】
package com.tiger.proxy;import java.lang.reflect.Method;import com.tiger.bean.Tiger;import net.sf.cglib.proxy.*;/** * 动态代理 cglib实现 * @author tiger * @date 2017年10月25日 */public class MyProxy_cglib implements MethodInterceptor {long start;long end;/** * 参数一:目标对象 * 参数二:目标方法 * 参数三:目标方法的参数 * 参数四:代理方法的对象 */@Overridepublic Object intercept(Object target, Method method, Object[] args, MethodProxy proxy) throws Throwable {//前置处理before(method.getName());//核心逻辑方法Object result=proxy.invokeSuper(target, args);//后置处理after();return result;}/*------ 中介下需要做的事情 start------*//** * 前置处理 * @param method */private void before(String method){System.out.println("正在执行:"+method);start = System.currentTimeMillis();//1s=1000ms}/** * 后置处理 */private void after(){end = System.currentTimeMillis();System.out.println("共花费了:"+(end - start)+"毫秒");}/*------ 中介下需要做的事情 end------*//** * 测试 * @param args */public static void main(String[] args) {Enhancer enhancer = new Enhancer();//注入目标类enhancer.setSuperclass(Tiger.class);//拦截器对象MyProxy_cglib proxy = new MyProxy_cglib();//设置回调方法enhancer.setCallback(proxy);Tiger obj = (Tiger) enhancer.create();//Animal obj = (Animal) enhancer.create();obj.eat();}}package com.tiger.proxy;import java.lang.reflect.*;import com.tiger.bean.*;import com.tiger.bean.Tiger;/** * 动态代理 jdk实现 * @author tiger * @date 2017年10月25日 */public class MyProxy_jdk implements InvocationHandler{private Object target; //目标对象 -- 真实对象long start;long end;/** * 创建一个代理类,便于client获取。 * @return */public Object getProxy(){return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this);}/** * 参数一:目标对象 * 参数二:目标方法 * 参数三:目标方法的参数 */@Overridepublic Object invoke(Object target, Method method, Object[] args)throws Throwable {before(method.getName());//核心逻辑Object result = method.invoke(target, args);after();return result;}/*------ 中介下需要做的事情 start------*//** * 前置处理 * @param method */private void before(String method){System.out.println("正在执行:"+method);start = System.currentTimeMillis();//1s=1000ms}/** * 后置处理 */private void after(){end = System.currentTimeMillis();System.out.println("共花费了:"+(end - start)+"毫秒");}/*------ 中介下需要做的事情 end------*/public void setTarget(Object target) {this.target = target;}public MyProxy_jdk() { }public MyProxy_jdk(Object target) {this.target = target;}/** * 测试 * @param args */public static void main(String[] args) {//动物的具体实现类//Car obj = new Car();Tiger obj = new Tiger();//Dog obj = new Dog();MyProxy_jdk proxy = new MyProxy_jdk(obj);//代理类Animal animal= (Animal) proxy.getProxy();//获取得到代理类接口animal.eat();}}
阅读全文
1 0
- 动态代理代码示例
- Java动态代理示例代码
- Java动态代理示例代码
- jdk动态代理示例以及代码原理分析
- Java 动态代理示例
- 动态代理示例
- 动态代理,示例
- JDK动态代理示例
- 动态代理示例
- JDK动态代理示例
- 代理模式代码示例
- 动态代理的简单示例
- Java 动态代理简单示例
- java 动态代理代码
- 代码详解动态代理
- 动态代理代码段
- c++代理类代码示例
- java 之 动态代理学习示例
- 月薪五万的程序员是什么样的?
- 程序员看见喜欢的人
- 天冷了,码哥急需陪睡!
- fancybox关闭弹出窗体parent.$.fancybox.close();
- chromium的下载和编译
- 动态代理代码示例
- 【网络编程】(五)NIO特点、实现客户端和服务端的单/双向通信
- Svn搭建工程总结
- 浪漫婚礼-会声会影模板
- Codeforces 877 E Danil and a Part-time Job(线段树+dfs序)
- 今天我开启了我的CSDN博客
- 制作一个菜单 ,用栈实现一些基本操作
- 程序员到哪儿都喜欢背电脑包,哪怕里面没有电脑,为啥?
- 四成单身、平均年薪19万、最爱买房,原来真实的程序员是这个样子的…...