动态代理
来源:互联网 发布:绝地求生优化太垃圾了 编辑:程序博客网 时间:2024/05/16 18:58
动态代理:
1、首先要用动态代理,那么目标对象必须是面向接口编程,即目标对象的类要抽取出来接口。
package com.arvin.inter;public interface DogI {public abstract void info();public abstract void run();}
package com.arvin.inter.impl;import com.arvin.inter.DogI;public class Dog implements DogI {@Overridepublic void info() {System.out.println("一只可爱的dog!");}@Overridepublic void run() {System.out.println("跑得特别快!!");}}
2、必须实现InvocationHandler接口,创建自己的调用处理器类。里面包含一个目标对象的引用target。
package com.arvin.invocation;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//我自己的调用处理器public class MyInvocationHandler implements InvocationHandler {// 目标对象private Object target;public MyInvocationHandler(Object target) {super();this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {// TODO Auto-generated method stubSystem.out.println(target.getClass().getInterfaces()[0].getName());// 在目标对象的方法执行之前简单的打印一下System.out.println("------------------before------------------");Object obj = method.invoke(target, args);// 在目标对象的方法执行之后简单的打印一下System.out.println("-------------------after------------------");return obj;}public Object getProxy() {return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), target.getClass().getInterfaces(),this);}}
3、创建目标对象的动态代理对象实例。
public Object getProxy() {return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), target.getClass().getInterfaces(),this);}
4、测试
package com.test;import com.arvin.inter.DogI;import com.arvin.inter.impl.Dog;import com.arvin.invocation.MyInvocationHandler;import com.arvin.invocation.ProxyGeneratorUtils;public class Test {public static void main(String[] args) {DogI dog = new Dog();// 实例化InvocationHandlerMyInvocationHandler invocationHandler = new MyInvocationHandler(dog);DogI d = (DogI) invocationHandler.getProxy();d.info();}}
0 0
- 代理-->静态代理&动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- oracle 中 cursor 与refcursor及sys_refcursor的区别 (转载)
- OCP 1Z0 052 94
- xml中子元素与属性有什么区别和关系?
- cocos2d-x 编译android 发生undefined reference to `XX'错误
- swift学习 github地址
- 动态代理
- 第三个博客-麦泽明
- 第三个-王铿
- 涛创瘟陕扇摆字闯蒂倍
- 多线程运行若干时间,主线程中断
- 递归算法的时间复杂度分析
- 关于平台开发用到的操作
- 四款秋季早餐养生粥大推荐
- 设计模式 - 命令模式(command pattern) 多命令 详解