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);
    }
    }

  • 相关阅读:
    UICollectionView添加 HeaderView FooterView
    Swift-UIDynamic初见
    Swift归档
    通知NSNotication&通知中心NSNoticationCenter
    iOS沙盒
    lldb-320.4.152﹣Debugger commands:
    UIPickerView採摘控件的學習
    hive的优化
    zookeeper简易配置及hadoop高可用安装
    hadoop组件概念理解
  • 原文地址:https://www.cnblogs.com/jarrem/p/5910830.html
Copyright © 2011-2022 走看看