首页 > 其他分享 >动态代理和反射的基本学习

动态代理和反射的基本学习

时间:2024-03-16 20:34:24浏览次数:18  
标签:反射 代理 切面 AOP 动态 方法

今天在跟着视频学习的时候发现老师讲的知识点都只简单的了解过但是没有深入学习,导致在跟着视频敲代码的时候完全不知道自己是在写什么东西。所以决定先把基础补一补再继续跟老师做项目。

打算先把自定义注解的编写和解析学好,想要学号这一块,又涉及到了Aop和java中反射的学习,那么话不多说,只要肯学习,这个难题就一定能解决。

先学习反射

反射设计到了动态代理的使用

定义:

什么是动态代理,就是无侵入式地给代码增添新的功能。

在 Java 中,反射(Reflection)是指在运行时检查或修改类、方法、字段等程序结构的能力。通过反射,可以在运行时获取类的信息、调用类的方法、访问或修改类的字段,而无需在编译时知道这些信息。

Java 的反射机制主要涉及以下几个核心类:

  1. Class 类:表示类的字节码对象,在运行时表示和操作类的信息。
  2. Constructor 类:表示类的构造方法。
  3. Method 类:表示类的方法。
  4. Field 类:表示类的字段。

通过反射,可以动态地创建类的实例、调用类的方法、访问和修改类的字段,甚至可以在运行时动态加载新的类。反射在一些框架和工具中被广泛使用,例如 Spring 框架、JUnit 测试框架等。但是,由于反射是一种高级特性,过度使用反射可能会降低代码的可读性和性能,因此在使用反射时需要谨慎考虑。也就是封装的过深,导致别人看不懂你写的代码。

 

AOP(面向切面编程)和反射在 Java 中经常结合使用,它们之间存在以下联系:

  1. AOP通过动态代理实现:AOP常常使用动态代理来实现横切关注点的织入。而反射是实现动态代理的一种常用手段,通过反射可以在运行时获取类的信息,并动态地创建代理对象。

  2. 反射获取方法和类的信息:AOP需要在特定的方法或类上进行切面织入,而要确定哪些方法或类需要被切面织入,就需要通过反射来获取方法和类的信息。反射可以获取方法和类的注解、修饰符、参数等信息,从而判断是否应该应用切面。

  3. AOP在运行时通过反射操作对象:AOP常常需要在目标方法执行前后进行一些额外的操作,比如记录日志、检查权限等。这些操作涉及到对目标方法的调用以及对目标对象的访问和修改,而这些都可以通过反射来实现。

  4. AOP和反射都能实现动态性:AOP和反射都具有动态性,可以在运行时改变程序的行为。AOP通过切面织入实现对程序流程的动态控制,而反射则可以在运行时动态地获取和修改类的信息,实现对程序结构的动态操作。

标签:反射,代理,切面,AOP,动态,方法
From: https://www.cnblogs.com/zhanshuang/p/18076915

相关文章

  • 动态规划专项训练记录 2024.3
    PathsontheTree若使分数最大,则尽量每条路径都到叶子,看到题目说绝对值差不超过1,可以发现是要尽量平均分配,设余r条路径既然要最大化贡献且剩下的路径要不重复的分配,那就选取前r条从该节点到叶子节点权值和最大的链,递归求取但有一种情况,若在点u选了路径t,在fa再次选择,就会不满......
  • C语言-动态内存管理
    动态内存管理为什么存在动态内存分配动态内存函数介绍malloc和freecallocrealloc常见动态内存错误1对NULL指针的解引用操作2对动态开辟空间的越界访问3对非动态开辟内存使用free释放4使用free释放一块动态开辟内存的一部分5.对同一块动态内存多次释放6.动态开辟......
  • P3374 【模板】树状数组 动态求连续区间和 刷题笔记
    我们创建如下的树状数组来辅助操作该数组每个s[i]处于第几层取决于其二进制最后低位的1处于从右往左数第几列显然所有奇数的最右边一位都是1即其最低位的1处于右边第一列所以所有的奇数处于第一层而2,6,10,14的最低位1处于右边第二列 所以这些数处于第二层 8的最......
  • C++算法学习心得八.动态规划算法(3)
    1.最后一块石头的重量II(1049题)题目描述:有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x和 y,且 x<=y。那么粉碎的可能结果如下:如果 x==y,那么两块石头都会被完全粉碎;如果 x!=y,那么重量为 x 的......
  • 基于EP4CE6F17C8的FPGA数码管动态显示实例
    一、电路模块1、数码管开发板板载了6个数码管,全部为共阳型,原理图如下图所示,段码端引脚为DIG[0]~DIG[7]共8位(包含小数点),位选端引脚为SEL[0]~SEL[5]共6位。端口均为低电平有效。其实物图如下所示。数码管引脚分配见下表。2、时钟晶振开发板板载了一个50MHz的有源晶振,为系统......
  • FSM状态机及C#反射实现逻辑
    零、大致逻辑1.初始化Start组件->状态->状态内部初始化->进入初始状态2.运行时Update遍历状态的所有条件->不满足所有条件对象->执行当前状态运行时逻辑->进行一次玩家搜索满足某一个条件对象->执行当前状态退出逻辑->执行状态改变->执行新状态进入逻辑->执行新状态运行时......
  • 【Linux系统编程】静态库与动态库
    静态库与动态库静态库的制作和使用编写库文件源代码和头文件。将所有需要做成库的源文件生成目标文件:gcc-c{filename}.c-o{filename}.o用ar工具将要做成库的目标文件打包:arrcslib{库名}.a{filename-1}.o...{filename-n}.o将使用库的源文件与库文件一起编译:gcc{......
  • 滴水逆向笔记系列-PE总结3-28.数据目录-29.静态链接库-动态链接库-30.导出表
    第二十八节课数据目录1.数据目录是什么可选PE头最后一个成员,就是数据目录,一共有16个分别是:导出表的数据目录、导入表的数据目录、资源表的数据目录、异常信息表的数据目录、安全证书表的数据目录、重定位表的数据目录、调试信息表的数据目录、版权所有表的数据目录、全局指针......
  • 打造真实感十足的速度表盘:WPF实现动态效果与刻度绘制
     概述:这个WPF项目通过XAML绘制汽车动态速度表盘,实现了0-300的速度刻度,包括数字、指针,并通过定时器模拟速度变化,展示了动态效果。详细实现包括界面设计、刻度绘制、指针角度计算等,通过C#代码与XAML文件结合完成。新建WPF项目:在VisualStudio中创建一个新的WPF项目。......
  • Leetcode刷题-动态规划-最长回文子串
    链接:5.最长回文子串-力扣(LeetCode)给你一个字符串s,找到s中最长的回文子串,如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:1<=s.length<=1000s......