代理分为两种:

1.静态代理

2.动态代理

 动态代理又分为两种:jdk 实现  ;Cglib 实现

3.Java中如何实现代理机制(JDK、CGLIB)

JDK动态代理:代理类和目标类实现了共同的接口,用到InvocationHandler接口。
CGLIB动态代理:代理类是目标类的子类,用到MethodInterceptor接口。

注意:

使用版本:

首先介绍jdk 实现动态代理:

第一步:建立接口

package com.asiainfo.proxydemo;

public interface BookFacade {
     public void addBook(); 
}
第二步:实现接口

package com.asiainfo.proxydemo;

import java.io.Serializable;

public class BookFacadeImpl implements BookFacade, Serializable {
    
    public void addBook() {
        // TODO Auto-generated method stub
          System.out.println("增加图书方法。。。");  
    }

}
第三步:建立代理类

package com.asiainfo.proxydemo;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    public class BookFacadeProxy implements InvocationHandler {
        
        private Object target;    
        
        public Object bind(Object target){
            this.target=target;
            return Proxy.newProxyInstance(target.getClass().getClassLoader(), (Class<?>[])                                                                           target.getClass().getGenericInterfaces(), this);
        }
    
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            // TODO Auto-generated method stub
            Object result=null;
            System.out.println("事物开始执行");
            method.invoke(target, args);
            System.out.println("事情结束");
            return null;
        }
        //代码测试
        public static void main(String[] args) {
            BookFacade target = new BookFacadeImpl();
            BookFacade bookFacadeProxy = (BookFacade) new BookFacadeProxy().bind(target);
            bookFacadeProxy.addBook();
            
         
        }
    
    }
其次是Cglib 实现:

第一步:

package com.asiainfo.proxydemo;

public class BookFacadeCglib {
     public void addBook(){
         System.out.println("addBook");
     }
}
第二步:cglib 建立测试类

package com.asiainfo.proxydemo;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

public class BookFacadeProxyCglib implements MethodInterceptor {
    private Object target;
    
    public Object getInstance(Object target){
        this.target=target;
        Enhancer enhancer=new Enhancer();
        enhancer.setSuperclass(this.target.getClass());
        //回调方法
        //enhancer.setCallbackType(this.target.getClass());
        enhancer.setCallback(this);
        //创建代理对象
        return enhancer.create();
    }

public   Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        // TODO Auto-generated method stub
        System.out.println("before run");
        Object returnvalue=proxy.invokeSuper(obj, args);
        System.out.println("after run");
        return null;
    }

//cglib代码测试 
    public static void main(String[] args) {
         BookFacadeCglib target = new BookFacadeCglib();
         BookFacadeCglib bookFacadeCglib = (BookFacadeCglib) new BookFacadeProxyCglib().getInstance(target);
         bookFacadeCglib.addBook();

}

}
参考:http://lrd.ele.me/2017/01/09/dynamic_proxy/

:https://blog.csdn.net/einstein10147/article/details/77040110

Java中如何实现代理机制(JDK、CGLIB)相关推荐

  1. 吃透Java中的动态代理

    动态代理在Java中是很重要的一部分,在很多框架中都会用到,如Spring中的AOP.Hadoop中的RPC等.为此在这把我对Java中的动态代理的理解分享给大家,同时写了一个模拟AOP编程的实例.( ...

  2. Java中的等待/通知机制(wait/notify)

    为什么80%的码农都做不了架构师?>>>    当一个线程修改了一个对象的值,另外一个线程需要感知到这个变化,并且做出相应的操作时,可以使用Java中的等待/通知机制去实现这个功能. ...

  3. Java中事件监听机制

    Java中事件监听机制 一.事件监听机制的定义 要想了解Java中的事件监听机制,首先就要去了解一下在Java中事件是怎样去定义的呢!在使用Java编写好一个界面后,我们就会对界面进行一些操作,比如, ...

  4. 什么是多态,JAVA 中多态的实现机制

    什么是多态,JAVA 中多态的实现机制 首先声明啊,这里的多态不是生物学和物理学上的多态性,这个是指编程语言中的多态. 官方说明: 多态(英语:polymorphism)指为不同数据类型的实体提供统一 ...

  5. java中设置网络代理

    代理服务器概述 许多系统通过代理服务器访问Web,有时还会访问Internet的其它非HTTP部分.代理服务器接收到本地客户端到远程服务器的请求.代理服务器向远程服务器发出请求,再将结果转发回本地客户 ...

  6. Java基础-Java中常用的锁机制与使用

    Java基础-Java中常用的锁机制与使用 锁lock或互斥mutex是一种同步机制,主要用于在存在多线程的环境中强制对资源进行访问限制.锁的主要作用为强制实施互斥排他以及并发控制策略.锁一般需要硬件 ...

  7. 一篇文章搞定java中的垃圾回收机制面试题

    一篇文章搞定java中的垃圾回收机制面试题 任何语言在运行过程中都会创建对象,也就意味着需要在内存中为这些对象在内存中分配空间,在这些对象失去使用的意义的时候,需要释放掉这些内容,保证内存能够提供给新 ...

  8. java中实现多态的机制是什么_java多态机制是什么

    java多态机制是什么 java中实现多态的机制是依靠父类或接口的引用指向子类.从而实现了一个对象多种形态的特性.其中父类的引用是在程序运行时动态的指向具体的实例,调用该引用的方法时,不是根据引用变量 ...

  9. Java中的原生动态代理和CGLIB动态代理的原理,我不信你全知道!

    作者:CarpenterLee cnblogs.com/CarpenterLee/p/8241042.html 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询 ...

最新文章

  1. DL-5 深度学习框架的对比
  2. maven项目编译漏掉src/main/java下的xml配置文件
  3. 关于fckEditor的功能配置-PHP版
  4. linux bool变量,Objective-C中的占位符,打印BOOL类型数据
  5. 记录下最近使用到的sql语句
  6. matplotlib之legend图例和标注(笔记三)
  7. 将 vCenter Server vSphere 软件从 VMware vSphere 6.5 升级到 6.7
  8. struts2错误:The Struts dispatcher cannot be found.
  9. 最大公约数 [2011年哈尔滨工业大学计算机研究生机试真题]
  10. c# 调用java webservice 参数获取不到_用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值!...
  11. windows10安装ninja过程记录
  12. MAC APP 签名证书查看
  13. 浏览器插件开发--获取淘宝的品牌类型
  14. 手把手教你vue中如何使用TradingView
  15. vue+element 实现时间选择器切换周月选择
  16. 基于ATTCK框架解析勒索病毒攻击
  17. 使用python打造一个中英互译软件(基于有道翻译)
  18. VS2017中自用部分插件的设置的翻译或功能介绍—— Viasfora设置(一)
  19. tyvj p1004 滑雪
  20. ug8.0更改计算机名,Ug8.0电脑名改了怎么处理

热门文章

  1. java学习(61):适配器
  2. java学习(18):巩固练习
  3. CM3计算板安装硬件时钟DS3231
  4. git使用.ignore忽略工程中的文件变动
  5. python评估不平衡数据集_Python Pandas:平衡不平衡的数据集(用于面板分析)
  6. Git之diff和status
  7. JS之字符串分割方法split
  8. 特征工程之数据预处理(下)
  9. 1-7docke的网络模式
  10. TortoiseSVN2IDE.pas源代码