Java反射
来源:互联网 发布:淘宝卖假的隐形眼镜 编辑:程序博客网 时间:2024/05/18 18:44
理解class类
对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。
Class 对象只能由系统建立对象
一个类在 JVM 中只会有一个Class实例
每个类的实例都会记得自己是由哪个 Class 实例所生成
获取 Class 对象的方式
Class类的常用方法
反射
反射概述
Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的內部信息,并能直接操作任意对象的内部属性及方法。
Java反射机制主要提供了以下功能:
在运行时构造任意一个类的对象
在运行时获取任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法(属性)
生成动态代理
在运行时构造一个类的对象
调用 Class 对象的 newInstance() 方法
调用 Constructor 对象的 newInstance(Object… initargs)
Method(Field) 对象
代表方法
Class 对象获取 Method 的方法:
getDeclaredMethod(String name, Class <?> ... parameterTypes) getDeclaredMethods() getMethod(String name, Class <?> ... parameterTypes) getMethods() Method 对象的方法:invoke(Object obj, Object... args)
Annotation 相关
以 Method 为例:
获取 Annotation 实例:
getAnnotation(Class annotationClass)
getDeclaredAnnotations()
getParameterAnnotations()
创建动态代理
Proxy 提供用于创建动态代理类和代理对象的静态方法, 它也是所有动态代理类的父类.
Proxy 提供了两个方法来创建动态代理类和动态代理实例
使用动态代理实现 AOP
横切关注点: 跨越应用程序多个模块的功能
代码实现片段
问题:
越来越多的非业务需求(日志和验证)加入后, 原有的计算器方法急剧膨胀.
属于系统范围内的需求通常需要跨越多个模块(横切关注点), 这些类似的需求包括日志, 验证, 事务等
- 代码混乱: 每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点.
- 代码分散: 以日志需求为例, 只是为了满足这个单一需求, 就不得不在多个模块里多次重复相同的日志代码. 如果日志需求发生变化, 必须修改所有模块.
使用动态代理模块化横切关注点
代码实现
第一张
第二张
测试代码
第一张
第二张
第三张
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- Web项目lib下的jar包无法自动加载
- EA&UML日拱一卒-活动图::14.2 Behavior StateMachines (10)
- #PHP#(三)数组及数组排序
- 深度学习调优深度学习模型
- Java内存回收机制
- Java反射
- str类函数
- 指针和引用(概念、使用方法、做参数、做返回值的作用,指针和引用的区别)
- 数据分箱
- 整理docker及Hadoop脚本(三)-实现一键式命令行远程安装docker集群
- linux、unix下创建、删除表空间
- Java线程池使用与原理
- JAVA实现Web服务端程序
- 优美的js代码,拿去玩~