spring中的ReflectionUtil
反射工具抽象类,处理方法及字段。主要通过MethodCallback,MethodFilter,FieldCallback,FieldFilter。
其类结构如下
1、主要方法
1.1 doWithMethods
遍历clazz层级关系的方法(包含父类的),通过MethodFilter过滤 ,MethodCallback回调来处理方法。在处理父类时,如果方法过滤器不为用户定义方法或者为用户定义方法不是不包含Object的方法。如果为接口类型,则处理接口方法
public static void doWithMethods(Class<?> clazz, MethodCallback mc, @Nullable MethodFilter mf) {// Keep backing up the inheritance hierarchy.Method[] methods = getDeclaredMethods(clazz, false);for (Method method : methods) {if (mf != null && !mf.matches(method)) {continue;}try {mc.doWith(method);}catch (IllegalAccessException ex) {throw new IllegalStateException("Not allowed to access method '" + method.getName() + "': " + ex);}}if (clazz.getSuperclass() != null && (mf != USER_DECLARED_METHODS || clazz.getSuperclass() != Object.class)) {doWithMethods(clazz.getSuperclass(), mc, mf);}else if (clazz.isInterface()) {for (Class<?> superIfc : clazz.getInterfaces()) {doWithMethods(superIfc, mc, mf);}}}
1.2 doWithLocalMethods
只处理本层级的方法,不包含父类的
public static void doWithLocalMethods(Class<?> clazz, MethodCallback mc) {Method[] methods = getDeclaredMethods(clazz, false);for (Method method : methods) {try {mc.doWith(method);}catch (IllegalAccessException ex) {throw new IllegalStateException("Not allowed to access method '" + method.getName() + "': " + ex);}}}
spring中的ReflectionUtil相关推荐
- Spring中配置DataSource数据源的几种选择
Spring中配置DataSource数据源的几种选择 在Spring框架中有如下3种获得DataSource对象的方法: 从JNDI获得DataSource. 从第三方的连接池获得DataSourc ...
- 详解设计模式在Spring中的应用
设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆. 今天,螃蟹在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了 ...
- Spring中利用applicationContext.xml文件实例化对象和调用方法
Spring中实例化对象和调用方法入门 1.jar包和xml的准备 已上传至百度云盘,链接: https://pan.baidu.com/s/1CY0xQq3GLK06iX7tVLnp3Q 提取码: ...
- 【spring 5】AOP:spring中对于AOP的的实现
在前两篇博客中,介绍了AOP实现的基础:静态代理和动态代理,这篇博客介绍spring中AOP的实现. 一.采用Annotation方式 首先引入jar包:aspectjrt.jar && ...
- Spring中WebApplicationContext
ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用"容器"来表述它更容易理解一 些,ApplicationContext则是& ...
- Spring中使用Schedule调度
在spring中两种办法使用调度,以下使用是在spring4.0中. 一.基于application配置文件,配置入下: 1 <bean id="jobDetail" cla ...
- Spring中SmartLifecycle和Lifecycle的作用和区别
欢迎关注方志朋的博客,回复"666"获面试宝典 本文基于SpringBoot 2.5.0-M2讲解Spring中Lifecycle和SmartLifecycle的作用和区别,以及如 ...
- 惊呆了,Spring中竟然有12种定义bean的方法
前言 在庞大的 Java 技术体系中,Spring 有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜. 我们都知道 Spring 是创建和管理bean的工厂,它提供了多种方式定义 bean,能 ...
- MyBatis 和 Spring 中的 23 种设计模式,真香,拿去用吧!
学习源码框架,为什么要从Mybatis框架入手?在 MyBatis 3.5.1 这个版中有 968 个类. 2770 个字段. 8422个方法. 42504 行代码. 186428个指令码.其源码体量 ...
最新文章
- 初等数学O 集合论基础 第一节 集合及其基本运算、de Moivre公式
- SAP Kyma上都有哪些namespace?
- spring mvc学习(13)windows上安装maven
- 存储过程循环遍历一个月的每一天的函数_JavaScript 循环:如何处理 async/await
- 2岁男童入住自如后患白血病离世 自如回复:道歉做不到
- RTMP协议及H264文件格式分析
- IDEA打包Springboot项目,运行
- qwidget设置背景透明_手机上设置“小小科技半透明”主题背景,效果美翻天!...
- 《孙子兵法》帮你找到合格的管理者
- 基于小鼠的基因集数据库资源(人鼠基因集比较)
- 【直播回顾】战码先锋首期8节直播完美落幕,下期敬请期待!
- 2022-2028全球与中国定时器市场现状及未来发展趋势
- Dynamodb 备份策略
- 在外远程NAS群晖Drive - 群晖Drive挂载电脑磁盘同步备份【无需公网IP】
- Redis + Lua 实现 sorted set 集合保证固定数量的数据,并保留新数据剔除旧数据
- react脚手架创建项目报错,ReactDOM.render is no longer supported in React 18.
- ping 的错误回应
- 免费破解所有型号 IBM 笔记本 BIOS 密码
- Ubuntu18.04打开优化设置界面
- 创建bbs mysql语句怎么写_MySQL常用语句 | 小灰灰博客
热门文章
- 软件工程之“个人附加题”
- 成都Uber优步司机奖励政策(4月12日)
- Sql字符串操作函数
- java 对excel操作 读取、写入、修改数据;导出数据库数据到excel
- Eclipse调试Java的10个技巧【转】
- javascript各种小技巧
- python基础语法 第0关print-温州文成高校邦数据科学通识课【Python基础语法】答案...
- python使用方法-python-tkinter使用方法——转载(一)
- 用python画梵高星空-python 梵高
- python图片识别-Python+Opencv识别两张相似图片