Spring中比较常用的工具类

2023-11-14

清单

1、BeanDefinitionReaderUtils
registerBeanDefinition-往spring容器注册一个beanDefinition
2、PropertiesLoaderUtils
loadAllProperties-加载配置文件,返回一个Properties

用法如
PropertiesLoaderUtils.loadAllProperties("application.properties", ClassUtils.getDefaultClassLoader());

3、CachingMetadataReaderFactory
getMetadataReader-获得某个类所有元信息,包括类中的注解等信息
4、BeanFactory(如DefaultListableBeanFactory)
getBeanNamesForType-获得某个interface的所有实现类的bean的名称
isTypeMatch-判断bean名称是否和某个类型匹配
registerSingleton-手动创建对象,并交给Spring。
destroySingleton-从Spring中移除某个bean。
getBean-从spring容器中,获得实例。很常用的一个方法
containsLocalBean-根据bean的名称判断bean在Spring中是否存在,用法如下

beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)

5、ReflectionUtils-类反射处理工具
doWithLocalFields-处理当前类中的属性,用法如下:

ReflectionUtils.doWithLocalFields(targetClass, field -> {
				MergedAnnotation<?> ann = findAutowiredAnnotation(field);
				if (ann != null) {
					if (Modifier.isStatic(field.getModifiers())) {
						if (logger.isInfoEnabled()) {
							logger.info("Autowired annotation is not supported on static fields: " + field);
						}
						return;
					}
					boolean required = determineRequiredStatus(ann);
					currElements.add(new AutowiredFieldElement(field, required));
				}
			});

doWithLocalMethods-处理当前类中的方法
其它的方法,请参照此工具类。
6、BeanUtils-bean实例工具
具体见Spring源码
7、AnnotationMetadata
introspect-获得某个类的注解信息,入参是一个class
getAnnotatedMethods-根据某个注解获得注解所标识的方法集合,用法如下:

 Set<MethodMetadata> beanMethods = original.getAnnotatedMethods(Bean.class.getName());

getAnnotationAttributes-获得某个注解的所有属性信息,用法如下:

AnnotationAttributes.fromMap(importingClassMetadata.getAnnotationAttributes(BeansScaner.class.getName()));

8、AnnotationConfigUtils
attributesForRepeatable-收集某个类中的某个注解的属性值
attributesFor-通过某个类的注解元数据,获得注解的属性值,代码写法如下

AnnotationAttributes enableAspectJAutoProxy =			AnnotationConfigUtils.attributesFor(importingClassMetadata, EnableAspectJAutoProxy.class);

9、SpringFactoriesLoader
loadFactoryNames-加载资源目录下META-INF/spring.factories配置文件,可以实现SPI。注:springboot中就是用到它的。用法如:

SpringFactoriesLoader.loadFactoryNames(GlobalSpiHandler.class, Thread.currentThread().getContextClassLoader());

10、AnnotatedElementUtils
getMergedAnnotationAttributes-获得某个某个方法或属性上的注解的属性信息,用法如下:

AnnotatedElementUtils.getMergedAnnotationAttributes(ao, type); // 其中,ao是Field或Method对象,type是注解类型

findMergedAnnotationAttributes-获得某个某个方法或属性上的注解的属性信息,用法如下:

AnnotatedElementUtils.findMergedAnnotationAttributes(method, Bean.class, false, false);

11、AnnotationUtils
findAnnotation-获得某个类的注解,用法如下:

AnnotationUtils.findAnnotation(clazz, Aspect.class)

getAnnotationAttributes-获得注解的属性,用法如下:

AnnotationUtils.getAnnotationAttributes(annotation);

getAnnotation-获得某个类或方法上的注解对象,用法如下:

AnnotationUtils.getAnnotation(method, Pointcut.class)
// 其中method是Method对象

其它的API可以进入此工具类中,进行查看

12、AopUtils
getMostSpecificMethod-获得最匹配的方法。当如果通过Method拿不到方法上面的注解等信息(例如在Advice方法中,就无法拿到方法上面的注解等信息),就可以先调用此方法拿到Method对象,然后就可以通过 Method 拿到方法上面的注解。用法如下:

Method targetMethod = AopUtils.getMostSpecificMethod(method, targetClass);

isAopProxy-判断一个bean是否被代理过。用法如下:

if (!AopUtils.isAopProxy(bean)) {
	  bean = super.wrapIfNecessary(bean, beanName, cacheKey);
}

isJdkDynamicProxy-判断一个bean是否是JDK代理出来的。

13、AopContext
currentProxy-获得与当前调用线程绑定的代理对象。前提是Aop代理开关的 exposeProxy 属性的值必须为true才行。
setCurrentProxy-将代理实例与当前调用线程绑定。绑定过程发生在切面的链式调用过程中,如 JdkDynamicAopProxy 的 invoke 方法中。
14、ExposeInvocationInterceptor
currentInvocation-获得与当前调用线程绑定的 methodInvocation。一般是在 @AspectJ 标识的类中的一些 Advice 类的方法。
15、LocalVariableTableParameterNameDiscoverer
getParameterNames-获得某个方法上面的参数名称,用法如下:

public String getKey(String key, Method method,Object[] args) {
	String[] parameterNames = new LocalVariableTableParameterNameDiscoverer().getParameterNames(method);
	return ElParser.getKey(key,parameterNames,args);
}

16、TransactionSynchronizationManager
getResource-根据当前数据源获得与线程绑定的数据库连接的包装对象 ConnectionHolder
isActualTransactionActive-判断当前事务是否活跃
setCurrentTransactionReadOnly-设置当前事务是否为只读
setCurrentTransactionName-设置当前事务的名称
setCurrentTransactionIsolationLevel-设置事务的隔离级别
setActualTransactionActive-设置事务是否活跃
initSynchronization-初始化事务,实际就是往名称叫synchronizations的ThreadLocal中设置一个空的容器
registerSynchronization-注册一个TransactionSynchronization,实际就是往initSynchronization初始的那个容器当中加一个TransactionSynchronization
其它的api请参考类中的方法

17、ApplicationContext
getBeansWithAnnotation-获得某个注解标识的类

this.applicationContext.getBeansWithAnnotation(RocketMQMessageListener.class)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring中比较常用的工具类 的相关文章

随机推荐

  • 概率论--数学期望与方差--协方差(详解)

    目录 数学期望与方差 离散型随机变量的数学期望 注意 连续型随机变量的数学期望 方差 常用随机变量服从的分布 二项分布 正态分布 随机向量与随机变量的独立性 随机向量 随机变量的独立性 协方差 协方差的定义 协方差的意义 协方差矩阵 数学期
  • 软件工程专业学生的自我反思

    迷茫时的反思 我现在是一名大三的学生 有时候还是会处在一种很迷茫的状态 这种状态体现在 自己会不自觉的打开王者荣耀 打开BiliBili刷视频 熬夜看剧 慢慢地陷入一个漩涡 越陷越深 你是否经常对自己的行为感到怀疑 对自己做的事感到后悔 那
  • 关于“由于找不到MSVCP140.dll,无法继续执行代码,重新安装程序可能会解决此问题等”解决方案

    首先说明一下该问题 该问题就是表示你们的操作系统中现在确实一些必要的文件 具体是啥我也不是很清楚 然后 你现在要安装的这个软件正好要调用这些文件的一些函数 就可以简单理解为使用这些文件 需要你去安装一下这些文件 解决方案 首先 你自己去从一
  • unity点乘和叉乘的使用

    本文从http blog csdn net yupu56 article details 53609028转载而来 Unity当中经常会用到向量的运算来计算目标的方位 朝向 角度等相关数据 下面咱们来通过实例学习下Unity当中最常用的点乘
  • 星星之火-38:20M的LTE带宽,为什么是1200个子载波?

    先给个结论 在LTE中 单个小区最大的频谱带宽为20M 每个子载波的间隔为15K 带宽为30K 一共可以分为1200个子载波 那这个数据是怎么来得呢 1 15K子载波间隔的由来 如果子载波的带宽30K 那么按照频分复用FDM的规则 频谱利用
  • 春招,进阿里了....

    个人背景是东北某 985 科班本硕 做的 测试开发 有两个自己写的小项目 下面是一些印象比较深刻的面试题 阿里一面 什么是软件测试 软件测试过程中会面向哪些群体 开发一个软件都要经过哪些阶段 什么是黑盒测试 什么是白盒测试 一个测试工程师应
  • 招聘小程序制作:连接人才与企业

    随着人才市场的竞争日益激烈 招聘小程序成为了企业寻找优秀人才和求职者找到理想工作的重要工具 通过招聘小程序 企业可以发布招聘信息 筛选简历 而求职者可以浏览职位 提交简历等 招聘小程序的好处 精准匹配人才 招聘小程序通过智能推荐算法分析求职
  • 2018最新area.json(智行火车票)

    ids 5876 level 1 level4Useing name 广东省 names 广东省 notvalid pid 0 tid 5876 ids 5876 6131 level 2 level4Useing name 东莞市 nam
  • SpringBoot中搭建thymeleaf网页遇到Cannot resolve MVC View ‘###‘的问题

    原因是配置文件pom xml中thymeleaf版本与springBoot版本有冲突 要引入的thymeleaf依赖是这个
  • 使用Redis存储和使用地理空间数据

    目录 让我们回到地理空间数据 什么是Geohash Redis如何存储地理空间数据 用于处理地理空间数据的命令 通过地理空间数据读取和搜索呢 结论 众所周知 处理地理空间数据非常困难 因为纬度和经度是浮点数 应该非常精确 此外 纬度和经度似
  • 基层技术管理工作思考?

    从动机和方法两方面谈谈我的看法 动机 要做好基层技术管理工作 首先要确保自己有良好的动机 即明白自己为何要走上技术管理岗位 做管理的根本是为了获得权力 但获得权力的动机却存在很大的差别 第一种单纯是为了利己 有相当数量的人往技术管理岗位 挤
  • Electron-vue脚手架改造vue项目(2018.11.13更新)

    文章中涉及vue项目都是基于vu cli快速构建 展示的目录结构是vue cli快速构建之后的目录 Electron vue也是基于vue cli的脚手架工具 小伙伴们自己构建的vue项目想要改造成桌面应用 还请移步 Electron将We
  • 《大型网站技术架构》第二篇 架构-高可用

    高可用在公司中的重要性 对公司而言 可用性关系网站的生死存亡 对个人而言 可用性关系到自己的绩效升迁 工程师对架构做了许多优化 对代码做了很多重构 对性能 扩展性 伸缩性做了很多改善 但别人未必能直观地感受到 也许你的直接领导都不知道你做的
  • GPS采集设备命令

    经纬度简介 经度 具体来说就是地球上一个地点距离一根被称为本初子午线的南北方向走线以东或以西的度数 按国际规定英国首都伦敦格林尼治天文台原址的那一条经线定为0 经线 从0 经线算起 向东 向西各分作180 以东的180 属于东经 用 E 作
  • cURL简单使用、libcurl编程, curl_easy_setopt

    更多关于curl的信息可以参考官网http curl haxx se http curl haxx se libcurl c curl easy setopt html CURLcodecurl easy setopt CURL handl
  • Java-集合(LinkedList类)

    简单介绍 1 LinkedList底层实现了双向链表和双端队列特点 2 可以添加任意元素 元素可重复 包括null 3 线程不安全 没有实现同步 底层操作机制 1 LinkedList底层维护了一个双向链表 2 LinkedList中维护了
  • java字符串判空失败

    那你就快放弃使用 equals lkm 或 lkm isEmpty 进行判空吧 最牛逼判空方法 StringUtils isEmpty lkm 判空失败还有一种可能 基本用什么方法判空都会失败 使用String value 进行转换的判空
  • Python调用ImageMagick生成PDF文件缩略图

    使用Python调用ImageMagick生成PDF文件缩略图 Imagemagick使用Ghostscript作为其依赖项之一 以便能够处理和转换PDF相关的图像 准备 安装Ghostscript 网站 安装ImageMagick 网站
  • 计算机上开发和运行应用程序与操作系统无关,计算机期中测验理论部分和答案-C.doc...

    计算机期中测验理论部分和答案 C 一 判断题 共10分 正确填写T 反之填写F 1 Cache和主存储器虽然都是用半导体芯片作为存储介质 但前者使用SRAM 后者使用DRAM 前者比后者的存取速度快 正确答案 T 2 当一个应用程序窗口被最
  • Spring中比较常用的工具类

    清单 1 BeanDefinitionReaderUtils registerBeanDefinition 往spring容器注册一个beanDefinition 2 PropertiesLoaderUtils loadAllPropert