当前位置: 代码迷 >> Java相关 >> JDK动态代理范例
  详细解决方案

JDK动态代理范例

热度:77   发布时间:2016-04-22 20:20:22.0
JDK动态代理实例
JDK动态代理是基于接口实现的,包括目标类,扩展类,目标的接口.

扩展类对象
public class MyInvocationHandler implements InvocationHandler {        // 目标对象      private Object target;          /**    * 构造方法    * @param target 目标对象     */     publicMyInvocationHandler(Object target) {        super();        this.target = target;    }       /**    * 执行目标对象的方法    */     public Object invoke(Objectproxy, Method method, Object[] args) throws Throwable {                 // 在目标对象的方法执行之前简单的打印一下        System.out.println("------------------before------------------");                 // 执行目标对象的方法        Object result = method.invoke(target, args);                 // 在目标对象的方法执行之后简单的打印一下        System.out.println("-------------------after------------------");                  return result;    }      /**    * 获取目标对象的代理对象    * @return代理对象    */     public Object getProxy(){        return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),                  target.getClass().getInterfaces(),this);    }  }

 

目标的接口
publicinterface UserService {       /**    * 目标方法     */     publicabstractvoid add();  }

目标类

publicclass UserServiceImpl implements UserService {          @override    publicvoid add() {        System.out.println("--------------------add---------------");    } }

测试

publicclass ProxyTest {         @Test         publicvoid testProxy() throws Throwable {             // 实例化目标对象             UserService userService = newUserServiceImpl();                          // 实例化InvocationHandler             MyInvocationHandler invocationHandler =newMyInvocationHandler(userService);                          // 根据目标对象生成代理对象             UserService proxy = (UserService)invocationHandler.getProxy();                          // 调用代理对象的方法             proxy.add();                      }  }

 

 

 

  相关解决方案