网站首页 > java教程 正文
大家好,今天给大家带来知识点分享,是java中的动态代理。今天我的讲解会先从动态代理的概念以及它的使用和动态代理的一些原理是怎么去实现的,带大家来验证一下,认真听下去,我觉得一定会有收获。
首先,按需,如果有概念的同学可以直接听后边。先来看第一章,对外代理是什么?有什么用?学一个知识点一样,一定要从宏观性上去认识它,就是它干嘛?它是啥?对外代理是一种在运行时动态生成带着对象的技术。
为什么是运行式?我这边圈出来,在加号中有一个变异式和一个运行式。这个区别是什么?先记住,它是在运行式底下,我会给你再讲的。总的来说就是一个生成代理对象的技术,它就是一个生成对象,这个对象是个代理对象。
先知道,它是一种设计模式,设计模式中有一种叫代理模式,代理模式又分为动态代理和静态代理。动态代理就是一种具体的代理模式,用于总的宏光上来说就是在不修改原始对象的情况下,通过代理对象来间接访问原始对象,并在访问前后执行额外的操作。
如果现在没有去使用过段代理的,听这个话肯定会比较含糊,现在听下去,到时候把使用和代理原码原理片贴完之后再回来过来看这句话,就觉得比较体无完顶了。
首先了解东亚代理之前,先要确定东亚代理中有哪些角色,主要分为两个角色,一个是目标对象,一个是代理对象。目标对象就是代增强的对象。一直说要生成一个代理对象,代理的是谁?代理的起码要有个目标,要生成个代表不可能平白无故凭空的去给谁代理,肯定要有个原始的目标对象,也是原始对象又称为目标对象,就是代增强的对象。
代理对象就是通过动态代理商技术,这不是说是一项生成代理对象的技术吗?代理对象就是通过动态代理这种技术去生成的代理对象,也就是会使用的对象,肯定会使用,要使用就肯定使用代理对象,不使用代理对象生成代理对象干嘛?是这么一个角色。
这边说一下代理模式,刚说了代理模式是一种设计模式,设代理模式下又分为两种,一个是代理模,一个是静态代理,还有一个就是动态代理。这两个区别是什么?静态代理就是不论是静态代理还是动态代理,有一个代理关系,这个代理关系就是目标对象和代理对象是有个代理关系的,就是代理对象要代理谁,要代理哪个目标,这是一个代理关系。
这个代理关系的区别就是一个是在编译期间就确定好代理关系,动态代理是在运行期间才确定好代理关系。在编译期间确定这个关系和在运行期间确定这个关系有什么区别?大家想,在写一个扎文件的时候去写,因为idea是自动去直接编译的,在编译期确定好代理关系相当于在写代码的时候就必须指明它,告诉它现在要去代理谁,代理什么,这个就是提前直接就确定好的。
但是在运行期才确定好的,这个是不是可扩展性高更高一些?就相当于在写代码时候不需要指定要去代理谁,但是在真正运行的时候才去发现真正的代理是谁,这个跟渣渣中多肽是不是有点像?多肽就是调用复方法的复引用的方法的时候,真正会调子类的哪个具体方法只有在运行期的时候才会去确定直线的方法,这个跟多肽有点像。
今天重点讲的是动态代理,大家看动态代理又分为两种实现,一个是jdk的动态代理还有一个cg lab的代理模式。这两个有什么区别?jdk都在代理,为什么叫jdk都在代理?就是扎瓦原生态扎瓦这一套,像这一套东西都是最原生态的就是jdk,在扎瓦的jym里边就八块钱一套jdk,jdk八jdk十一版本中就是基于jdk加了原生态最原始的代理模式,基于jdk来实现。
还有一个就是cg lab,它是一种基于懂这两个的区别,一个是基于反射,一个是基于继承。我觉得在今天正在讲的是jdk独家代理,在讲之前需要先明确一下jdk端代理中有三个概念,一个是目标接口,一个是目标对象,一个是代理对象。
它们三个的关系是什么?目标接口就是其实就是目标对象,就是抽象出来抽象成一个接口,目标对象就是要去增强的对象,它是继承自目标接口的,真正最后代理对象被创建出来之后也是要去继承实现目标接口的,就是其实。
所以这里一定要先了解一个概念,就是代理对象和目标对象是平行的关系,它们俩都是实现了目标接口的接口,这个也就是为什么用jdk都在代理一定要去实现一个接口?这个现在不了,不理解没问题,先听,等一下把代码看了就明白,看了原理的讲解就知道为什么是这样,可以先有个大概的概念。
ctlive的代理是什么?没有接口,就是一个目标对象和代理对象,代理对象去实现了一个目标对象,去通过继承之后通过去重写副类里边的方法,是不是就是目标对象就是代理对象的副,去重写副里边的方法去进行功能的扩展。
总的来说,不论是jdk的动态代理还是cg lab的动态代理,都是去实现功能增强的方式。
这里代理思想和目标关系是一个负字关系,上面是个平级关系,有了这个了解,就是先看一下,等会看了代码之后再回过头来看,我觉得可能才会理解深刻。
总的来说,代理模式的应用我觉得就两个功能,一个是功能增强,刚一直说在代理对象是基于目标对象的基础之上去进行一些增强的功能,这是一个。还有个控制访问,就是甚至可以控制目标对象原始方法要不要去执行,这个等一下看代码都会跟你去讲的,所以先有一个宏观的认识。
代理是什么?它是一种增强的技术,是给一个比如是要去生成一个新的代理对象,去对某一个目标对象进行增强的效果和一种技术,知道这个就行了。接下来通过代码去演示,觉得会有更深刻的理解。
猜你喜欢
- 2024-10-04 java:jdk动态代理(jdk动态代理实现aop)
- 2024-10-04 Java中代理的理解及其实现方式(1)- 静态代理
- 2024-10-04 Java三种代理模式:静态代理、动态代理和cglib代理
- 2024-10-04 Java 学习笔记--反射与代理机制(静态、动态)
- 2024-10-04 Java的动态代理如何实现?#程序员(java动态代理有什么用)
- 2024-10-04 Java动态代理与静态代理以及它能为我们做什么
- 2024-10-04 Java - 动态代理实现原理以及ASM技术
- 2024-10-04 深入理解Java反射和动态代理(jdk动态代理和反射)
- 2024-10-04 java手把手教你写动态代理和静态代理的实现
- 2024-10-04 Java动态代理简单介绍(java动态代理的两种方式)
你 发表评论:
欢迎- 06-15Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 06-15推荐一款超棒的SpringCloud 脚手架项目
- 06-15IDEA将项目打包成jar包(idea打包普通java项目)
- 06-15Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 06-15记录Dockerfile将jar包构建成部署所需的镜像
- 06-15项目基础部署汇总八---linux下xxl-job安装
- 06-15Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 06-15终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 最近发表
-
- Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 推荐一款超棒的SpringCloud 脚手架项目
- IDEA将项目打包成jar包(idea打包普通java项目)
- Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 记录Dockerfile将jar包构建成部署所需的镜像
- 项目基础部署汇总八---linux下xxl-job安装
- Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 如何将本地JAR文件添加到Maven项目中
- Java 类隔离应用:多 Jar 包支持(java接口隔离原则)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)