动态代理的概述和实现
动态代理
代理:
本来应该自己做的事情,却请了别人来做,被请的人就是代理对象。
举例:春季回家买票让人代买
动态代理:
在程序运行过程中产生的这个对象
而程序运行过程中产生对象其实就是我们刚才反射讲解的内容,所以,动态代理其实就是通过反射来生成一个代理
在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口就可以生成动态代理对象。JDK提供的代理只能针对接口做代理。我们有更强大的代理cglib
Proxy类中的方法创建动态代理类对象
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
最终会调用InvocationHandler的方法
InvocationHandler
Object invoke(Object proxy,Method method,Object[] args)
package cn.learn_06;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class MyInvocationHandler implements InvocationHandler {private Object target; // 目标对象public MyInvocationHandler(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("权限校验");Object result = method.invoke(target, args);System.out.println("日志记录");return result; // 返回的是代理对象}
}
package cn.learn_06;import java.lang.reflect.Proxy;public class Test {public static void main(String[] args) {UserDao ud = new UserDaoImpl();ud.add();ud.delete();ud.update();ud.find();System.out.println("-----------");// 我们要创建一个动态代理对象// Proxy类中有一个方法可以创建动态代理对象// public static Object newProxyInstance(ClassLoader loader,Class<?>[]// interfaces,InvocationHandler h)// 我准备对ud对象做一个代理对象MyInvocationHandler handler = new MyInvocationHandler(ud);UserDao proxy = (UserDao) Proxy.newProxyInstance(ud.getClass().getClassLoader(), ud.getClass().getInterfaces(), handler);proxy.add();proxy.delete();proxy.update();proxy.find();System.out.println("-----------");StudentDao sd = new StudentDaoImpl();MyInvocationHandler handler2 = new MyInvocationHandler(sd);StudentDao proxy2 = (StudentDao) Proxy.newProxyInstance(sd.getClass().getClassLoader(), sd.getClass().getInterfaces(), handler2);proxy2.login();proxy2.regist();}
}
动态代理的概述和实现相关推荐
- 反射+动态代理+枚举
一.反射 1.类的加载的概述 A:类的加载概述当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化.加载 就是指将.class文件读入内存,并为 ...
- 自建连接池,通过动态代理增强getConnection()方法,使其调用用close()方法时具有返回连接的功能
文章目录 一.JDBC 1.概述与原理 2.API介绍 二.连接池 三.动态代理 1.概述与原理 2.API介绍 四.动态代理增强getConnection()方法 1.原因 2.代码思路与实现 3. ...
- 【Java 19】反射 - 反射机制概述、获取Class实例、类的加载与ClassLoader的理解、创建运行时类的对象、获取运行时类的完整结构、调用运行时类的指定结构、动态代理
反射机制概述.获取Class实例.类的加载与ClassLoader的理解.创建运行时类的对象.获取运行时类的完整结构.调用运行时类的指定结构.动态代理 反射 1 Java反射机制概述 1.1 Java ...
- 通过反射创建动态代理对象(二)
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 将"通过反射创建动态代理对象(一)"合二为一 二.代码说明 package staticimpo ...
- Java基础:动态代理
系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 概述 在运行时,动态创建一组指定的接口的实现类对象(代理对象)! 代理是实现AOP(面向切面编程)的核 ...
- 代理模式——静态代理,动态代理(JDK代理和CGLib代理)
概述 由于某些原因需要给某对象提供一个代理以控制对该对象的访问. 这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. Java中的代理按照代理类生成时机不同又分为 ...
- 动态代理——》AOP —— Spring 中的 AOP||AOP 相关术语||学习 spring 中的 AOP 要明确的事
AOP 概述 什么是 AOP AOP:全称是 Aspect Oriented Programming 即:面向切面编程 AOP 的作用及优势 作用: 在程序运行期间,不修改源码对已有方法进 ...
- Java-CGLib动态代理
文章目录 导读 问题 CGLib动态代理和JDK动态代理的区别 CGLib概述 改造 导读 Spring-AOP基础知识 Java-JDK动态代理 Java-CGLib动态代理 问题 另一篇博文中的问 ...
- Java-JDK动态代理
文章目录 导读 问题 概述 改造 其他相关接口/类 导读 Spring-AOP基础知识 Java-JDK动态代理 Java-CGLib动态代理 问题 另一篇博文中的问题 性能监视横切逻辑代码 概述 J ...
最新文章
- Linux下 WiFi rtl 移植,IMX6Q Linux WIFI+BT(RTL8723au)模块移植问题
- 诺奖得主涉嫌学术不端!30余篇论文被指涉嫌P图造假、复制粘贴,合作者包括中国学者...
- JVM盘点家底查看初始默认值
- List有关知识与ArrayList的实现
- 【查看hadoop镜像】
- 容器源码分析之HashTable(八)
- Linux指令:tar打包与压缩
- 春运期间长江海事局开辟四类运输“绿色通道”
- ubuntu系统使用命令行播放MP3歌曲
- openfire-好友管理实现好友添加及分组管理
- VC2008 快捷键
- gz是什么意思饭圈_饭圈黑话出圈,吃瓜还需揭秘文字?
- Python Selenium的下载和安装
- 48-Elasticsearch-2(DSL查询_搜索结果处理_RestClient查询文档)
- ajax向后台传递参数为对象实例
- 电商直播方案主要有哪些内容?
- 激励人生10张英文励志海报
- 小程序身份证号码保留前后4位其他用“*”代替
- 华为OD机试2022.11.04 只记得两题
- Windows电脑开机蓝屏(1)