zoukankan      html  css  js  c++  java
  • JDK动态代理

     JDK动态代理

     JDK动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。

        InvocationHandler是一个接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,

    动态将横切逻辑和业务逻辑编制在一起。

         Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象。
         缺点:必须要实现一个或多个接口,一个代理类只能服务一个接口,只针对实现了接口的类

    1.接口类 mainFunction

    package com.tang.DynamicProxyImp;
    public interface mainFunction {
    public String message();
    }


    2.业务类 ServiceImp(实现mianFunction接口)


    package com.tang.DynamicProxyImp;
    public class ServiceImp implements mainFunction{
    @Override
    public String message() {
    // TODO Auto-generated method stub
    return "jarrem";
    }

    }


    3.代理类 DynamicProxy

    package com.tang.DynamicProxyImp;
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    //InvocationHandler是代理实例的调用处理程序 实现的接口
    public class DynamicProxy implements InvocationHandler {
    private Object object;
    public DynamicProxy(Object object){
    this.object=object;
    }
    //实现加强
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable {
    Object invoke = method.invoke(object, args);
    return ((String)invoke).toUpperCase();
    }
    }


    4.测试类 MyTest

    package com.tang.DynamicProxyImp;
    import java.lang.reflect.Proxy;
    public class MyTest {
    public static void main(String args[]){
    mainFunction mainfunction=new ServiceImp();
    DynamicProxy dynamicProxy = new DynamicProxy(mainfunction);
    //返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
    mainFunction proxy=(mainFunction) Proxy.newProxyInstance(
    mainfunction.getClass().getClassLoader(),// 定义代理类的类加载器
    mainfunction.getClass().getInterfaces(),    //代理类要实现的接口列表
    dynamicProxy // 指派方法调用的调用处理程序
    );
    String message = proxy.message();
    System.out.println(message);
    }
    }

  • 相关阅读:
    [javascript] vuejs为输入框增加回车事件
    iview上的兼容性问题
    python+vscode安装与插件配置
    Chrome浏览器获取XPATH的方法----通过开发者工具获取
    使用谷歌浏览器定位xpath是否准确
    [PHP] xpath提取网页数据内容
    PHP中preg_match正则匹配的/u /i /s是什么意思
    Flink connect 算子实践
    DataStreamUtils 连续keyBy 优化
    Heartbeat原理及部署
  • 原文地址:https://www.cnblogs.com/jarrem/p/5836601.html
Copyright © 2011-2022 走看看