目录

1. 什么是动态代理?

2.动态代理的实现方式有几种?

3. JDK动态代理

4. CGLB动态代理

5.动态代理的效率

6.为什么要使用动态代理呢?

7. JDK动态代理详细使用介绍


1. 什么是动态代理?

动态代理是通过创建代理对象,在不改变原有代码的基础上,给程序增加新的功能,实现了程序的功能增强。

2.动态代理的实现方式有几种?

  • JDK动态代理
  • CGLB动态代理

3. JDK动态代理

使用了JDK中的InvocationHandler接口,Method类和Proxy类。JDK的动态代理的要求:目标类必须要有接口。(目标类就是那个我们需要增强功能的方法所在的那个类,也是接口实现类所在的类)。我们通常回给目标类中要增强的方法增加上日志,事务等非业务功能。

4. CGLB动态代理

CGLB动态代理即Code Generation Library,是一个开源的第三方工具库,其原理是继承,去生成目标类的子类对象,这样对子类的功能进行增强。但是要求:目标类不能用final修饰,目标类中的方法也不能被final修饰。

5.动态代理的效率

CGLB动态代理的效率要大于JDK动态代理的效率。

6.为什么要使用动态代理呢?

设计出来动态代理是为了解决一定的需求,因为在我们实际的开发过程中,经常会遇到,要给写好的某个方法的前面或者是后面增加方法,甚至是给好几个类的方法增加新的功能。若是我们直接在方法上写上新的增加的方法,就会显得很乱,而且很冗余。

那么我们初步改进可以通过写一个工具类去解决,在一个工具类中写上我们要增强的方法,但是要求这些增强的方法是静态修饰的,这样我们就可以在原有的代码上,使用类名.方法名的方式,来给原有的功能增加新的功能。这样一定程度上的解决了代码混乱的程度,但是还是不太完美。

再次改进:这个时候就是使用动态代理。

这就体现了动态代理的优势,即在不修改任何原有代码的情况下,实现给原有功能的增强。

7. JDK动态代理详细使用介绍

由于我们在Java项目中,直接使用动态代理的地方不多,所以我们都是使用的aspectj框架中写好的动态代理。aspectj框架中的动态代理就是封装的JDK动态代理。

下面将仔细介绍使用JDK动态代理的步骤:

  • 最好可以先创建一个工具类,将要增强的功能先写好,这样我们便可以一句代码能调动这个用来增强的功能。
  • 自定义类,去实现InvocationHandler接口,并且,重写invoke()方法。
  • 在这个自定义的类中,添加Objeck属性,并且写上有参的构造方法。
  • 在invoke()方法中写上如下代码

  • 然后去主类中,使用动态代理,实现功能的增强。

注意:

上面的JDK动态代理的原理是反射机制。

我们可以使用proxy.getClass().getName()看到的值为com.sun.proxy.$Proxy

Java中的JDK动态代理相关推荐

  1. Java设计模式之JDK动态代理模式

    先来谈谈什么动态代理模式,在一家软件公司,假如你是一个软件开发工程师.当客户带着需求去找公司的时候,显然不会直接让你和客户谈,肯定是先和商务经理,产品经理类的谈需求.因为客户的需求可能千奇百怪,很有可 ...

  2. spring中的jdk动态代理(代码步骤)

    UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...

  3. Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理

    文章目录 什么是代理模式 代理模式应用场景 代理的分类 静态代理 什么是静态代理 深入解析静态代理 小结 动态代理 什么是动态代理 JDK动态代理 原理和实现方式 代码实现 优缺点 Cglib动态代理 ...

  4. Cglib和jdk动态代理

    前言:动态代理解决了方法之间的紧耦合,IOC解决了类与类之间的紧耦合. Cglib和jdk动态代理的区别? 1.Jdk动态代理:利用拦截器(必须实现InvocationHandler)加上反射机制生成 ...

  5. Chapter 4、JDK 动态代理

    为了解决静态代理的带来的问题: 代理类需要实现与目标类一样的接口,会导致代理类数量较多,不易维护 一旦接口增加方法,目标类和代理类都需要维护 JDK 提供了动态代理,实现动态代理满足下列条件: 代理类 ...

  6. Cglib和jdk动态代理的区别

    Cglib和jdk动态代理的区别 动态代理解决了方法之间的紧耦合, IOC解决了类与类之间的紧耦合! Cglib和jdk动态代理的区别? 1.Jdk动态代理:利用拦截器(必须实现InvocationH ...

  7. java jdk动态代理学习记录

    转载自: https://www.jianshu.com/p/3616c70cb37b JDK自带的动态代理主要是指,实现了InvocationHandler接口的类,会继承一个invoke方法,通过 ...

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

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

  9. 浅谈Spring中JDK动态代理与CGLIB动态代理

    前言 Spring是Java程序员基本不可能绕开的一个框架,它的核心思想是IOC(控制反转)和AOP(面向切面编程).在Spring中这两个核心思想都是基于设计模式实现的,IOC思想的实现基于工厂模式 ...

  10. java代理(静态代理和jdk动态代理以及cglib代理)

    说到代理,脑袋中浮现一大堆代理相关的名词,代理模式,静态代理,jdk代理,cglib代理等等. 记忆特别深刻的是,一次面试中,一位面试官问我,spring的AOP核心采用的设计模式是什么什么模式,阅读 ...

最新文章

  1. Nginx面试中最常见的18道题及答案
  2. kafka的使用场景(转载+自己笔记)
  3. logstash 中multiline插件的用法
  4. c语言 一个矩阵的乘积,c语言矩阵相乘
  5. 提交json数据给Java_java 实现通过 post 方式提交json参数操作
  6. requests 超时关闭_requests获取响应时间(elapsed)与超时(timeout)
  7. 超越极限——2009年度DDR3内存横向测试(图)
  8. CSS-盒子模型,标准盒子模型,IE 盒子模型,盒模型之间的转换
  9. 一年中所有节日的排列顺序_我国一年中的传统节日。(按顺序)
  10. 如何成为一个牛逼的程序员?
  11. fcntl设置FD_CLOEXEC
  12. 取消Wince App 应用启动动画和隐藏分区注册表项
  13. 使用U盘安装windows系统时提示找不到任何设备驱动程序
  14. stm32中堆、栈、flash、ROM、RAM、bss段、data段、text段、Code、Ro-data、 ZI-data、RW-data简介
  15. UVa 10387 Billiard
  16. BZOJ 4372 烁烁的游戏
  17. php活体检测,双目活体检测摄像头,人脸识别SDK,红外活体算法
  18. redis的incr+expire的坑
  19. STM32-NVIC中断优先级分组-中断优先级设置
  20. 解锁Vue百度地图加载的N种姿势

热门文章

  1. R语言分布的卡方拟合优度检验
  2. JavaWeb学习笔记
  3. 算法分析与设计:棋盘覆盖问题(分治法)
  4. Django深入模板引擎
  5. Django Book 2.0 翻译
  6. 印象笔记粘贴HTML,印象笔记剪藏插件
  7. android两个popwindow背景,Android PopWindow 设置背景亮度的实例
  8. iOS13.4系统来袭CarPlay更好用,安卓微信内侧7.0.13支持黑暗模式了,附下载地址...
  9. java 离线版语音转文字
  10. php mysql手册下载chm_PHP7教程|PHP7中文手册下载chm版 - 欧普软件下载