首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring AnnotationUtils在5.2中不再搜索父类了吗?

在Spring 5.2版本中,AnnotationUtils的行为发生了变化,不再搜索父类。在之前的版本中,AnnotationUtils会递归搜索父类,直到找到指定的注解或达到继承层次的顶部。但是在Spring 5.2中,AnnotationUtils只会搜索当前类的注解,不会再向上搜索父类。

这个变化的主要原因是为了提高性能和减少不必要的搜索。在实际开发中,通常只需要在当前类中查找注解,而不需要递归搜索整个继承层次。这样可以减少搜索的时间和资源消耗。

然而,如果需要在整个继承层次中搜索注解,可以使用Spring 5.2中引入的新方法AnnotationUtils.findAnnotation(Method, Class)和AnnotationUtils.findAnnotation(Method, Class)。这些方法可以指定要搜索的类和方法,以及要查找的注解类型。

总结起来,Spring 5.2中的AnnotationUtils不再搜索父类,只会在当前类中查找注解。如果需要在整个继承层次中搜索注解,可以使用新的findAnnotation方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【小家SpringSpring贡献的多个注解相关的工具AnnotationUtils、AnnotatedElementUtils、AnnotationConfigUtils...

前言 本文主要聊聊Spring提供的多个关于注解相关的工具AnnotationUtils和AnnotatedElementUtils等等 因为很多逻辑都封装在了工具里面,因此要理解Spring...> clazz):找到第一个(自己有就自己了,否则去继续找)有这个注解的。...Spring内部工具,用于识别注解配置中的bean定义。...//上面的解析相当于配置的情况,而这种情况就是本类上直接标注~~~(备注:@Qualifier可以标注上,作用就体现在这里了) Class<?...因为注解驱动大行其道的今天,个人认为有必要去了解Spring解析注解的一些方式、方法等。 Spring易学难精是得以与他优秀的设计:分层、封装、扩展、包访问权限管理等等,各处都有所体现

3.6K22

从源码中看@Qualifier注解

定义一个B,JavaConfig中定义了两个关于B的Bean,b1和b2,A中注入。...中注入了两个B类型的Bean:b1和b2,那么Spring启动时,框架本身就会查找候选的依赖关系和Bean,并将Bean注入,所以在此时便会获取到b1、b2。...注解了B类型的Bean b1,因此,通过调用的isAutowireCandidate方法返回true,进行下一步判断。...Spring自动装配机制中,当存在多个类型相同的Bean时,自动装配可能会失败,因此Spring无法知道使用哪个Bean,此时,可以使用限定符(@Qualifier)来指定所需要的Bean。...通过上一步获取的注解全/短路径去搜索@Qualifier注解,如果在RootBeanDefinition中可以获取到注解,则开始执行通过元数据工具获取元数据属性逻辑。

17030

spring相关注解_redis和session区别

Spring 提供两个注解工具 AnnotationUtils 或者 AnnotatedElementUtils 时,我们可以从注释上了解到,Spring 支持 find 和 get 开头的两方法...给出了一套定义: 当 AnnotatedElement 是 Class 时:层级结构指本身,以及和它的接口,以及接口……整个继承树中的所有 Class 文件; 当 AnnotatedElement...是 Method 是:层级结构指方法本身,以及声明该方法的它的接口,以及接口……整个继承树中所有 Class 文件中,那些与搜索的 Method 具有完全相同签名的方法;...:只查找元素直接声明或通过@Inherited继承的注解; SUPERCLASS:查找元素直接声明或所有的注解; TYPE_HIERARCHY:查找元素、所有以及实现的接口的全部注解...; TYPE_HIERARCHY_AND_ENCLOSING_CLASSES:查找查找元素、所有以及实现的接口、封闭以及其子类的全部注解。

26820

Spring依赖注入(DI)核心接口AutowireCandidateResolver深度分析,解析@Lazy、@Qualifier注解的原理【享学Spring

备注:@Primary这个注解是解析bean定义时候处理的,解析成为isPrimary()从而在beanFactory里得到使用 在上篇文章:【小家Spring】使用@Async异步注解导致该Bean...Spring4.0后的泛型依赖注入主要是它来实现的,所以这个也是Spring4.0后出现的 //@since 4.0 它能够根据泛型类型进行匹配~~~~ 【泛型依赖注入】 public class...,所以它不仅仅能处理org.springframework.beans.factory.annotation.Qualifier、@Value,还能够处理泛型依赖注入,因此功能已经很完善了~~~ Spring2.5...Annotation> valueAnnotationType) { this.valueAnnotationType = valueAnnotationType; } // 这个实现,比的实现就更加的严格了...DependencyDescriptor descriptor) { boolean match = super.isAutowireCandidate(bdHolder, descriptor); // 这里发现,及时都匹配上了

1.2K31

Spring中异步注解@Async的使用、原理及使用时可能导致的问题

配置上添加@EnableAsync注解 2. 需要异步执行的方法的所在Spring管理 3....我们接着分析 原理分析 我们分析某一个技术的时候,最重要的事情是,一定一定要找到代码的入口,像Spring这种都很明显,入口必定是@EnableAsync这个注解上面,我们来看看这个注解干了啥事(本文基于...我们先看下它的AbstractAsyncConfiguration,其源码如下: @Configuration public abstract class AbstractAsyncConfiguration...instanceof AopInfrastructureBean) { return bean; } // 对已经被代理的不再生成代理,只是将通知添加到代理的逻辑中...报错的具体位置我在你知道Spring是怎么将AOP应用到Bean的生命周期中的吗? 文章末尾已经分析过了,本文不再赘述 ?

1.4K41

Async的线程池使用的哪个?

前言Spring中我们经常会用到异步操作,注解中使用 @EnableAsync 和 @Async 就可以使用它了。...正文首先要使异步生效,我们得启动中加入 @EnableAsync 那么就点开它看看。...它会使用 @Import 注入一个 AsyncConfigurationSelector ,启动是通过可以决定它使用的是配置 ProxyAsyncConfiguration 。...子类 AsyncExecutionInterceptor 重写 getDefaultExecutor 方法,首先调用逻辑,返回null则配置一个名为 SimpleAsyncTaskExecutor...的执行器/** * * 获取或构建此通知实例的默认执行器 * 这里返回的执行器将被缓存以供后续使用 * 默认实现搜索唯一的TaskExecutor的bean * 在上下文中,用于名为“taskExecutor

1.1K20

EnhancerBySpringCGLIB 获取getParameterAnnotations为null的解决办法

二、问题原因 Spring项目中若开启CGLIB代理 spring.aop.proxy-target-class=true 注入接口后无法获取其实现上注解。...正常情况获取注解方式: Annotation[][] parameterAnnotations = method.getParameterAnnotations(); 因此决定换个思路,直接获取cglib代理的原始对象...,获取原始对象上的参数注解就可以了 那我们的解决方式是加一个判断,如果是CGLIB代理,则通过它的去获取方法的参数注解。 ...2.使用注解解析器工具 import org.springframework.core.annotation.AnnotationUtils; public static <A extends Annotation...return findAnnotation(clazz, annotationType, true); } 这种方式,小伙伴们也可以去尝试一下,但是我用的springboot框架,我的项目内还是需要用到spring

56310

谈谈 Spring 中的 AutowireCandidateResolver

// QualifierAnnotationAutowireCandidateResolver做了实现,判断是否有@Qualifier注解 // 一共有两种注解: // 1.Spring...Object getSuggestedValue(DependencyDescriptor descriptor) { return null; } // 对某个依赖我们想要延迟注入,但是创建...可以看到继承关系都是单层的,我们就一个一个往下看 SimpleAutowireCandidateResolver 相比于接口没有什么区别,实现也就是接口中的默认实现,一般也不会使用这个 ” public...获取@Value注解中的值 protected Object extractValue(AnnotationAttributes attr) { Object value = attr.get(AnnotationUtils.VALUE...方法实现跟接口保持一致 GenericTypeAwareAutowireCandidateResolver:判断泛型是否匹配,支持泛型依赖注入(From Spring4.0) QualifierAnnotationAutowireCandidateResolver

38410

Spring杂谈 | Spring中的AutowireCandidateResolver

// QualifierAnnotationAutowireCandidateResolver做了实现,判断是否有@Qualifier注解 // 一共有两种注解: // 1.Spring...Object getSuggestedValue(DependencyDescriptor descriptor) { return null; } // 对某个依赖我们想要延迟注入,但是创建...可以看到继承关系都是单层的,我们就一个一个往下看 SimpleAutowireCandidateResolver 相比于接口没有什么区别,实现也就是接口中的默认实现,一般也不会使用这个 ” public...获取@Value注解中的值 protected Object extractValue(AnnotationAttributes attr) { Object value = attr.get(AnnotationUtils.VALUE...方法实现跟接口保持一致 GenericTypeAwareAutowireCandidateResolver:判断泛型是否匹配,支持泛型依赖注入(From Spring4.0) QualifierAnnotationAutowireCandidateResolver

65120

你还不会搞数据脱敏?MyBatis 插件 + 注解轻松实现数据脱敏,So easy~!

问题 项目中需要对用户敏感数据进行脱敏处理,例如身份号、手机号等信息进行加密再入库。...上层业务调用不再需要考虑数据的加敏同时也保证了数据的加解密 Mybatis 插件原理 Mybatis 的是通过拦截器实现的,Mabatis 支持对当事人进行拦截 实现 设置对参数中带有敏感参数字段的数据时进行加密...定义特定注解,切入时需要检查字段中是否包含注解来是否加解密。....*; /** * 该注解定义上 * 插件通过扫描对象是否包含这个注解来决定是否继续扫描其中的字段注解 * 这个注解要配合EncryptTransaction注解 **/ @Inherited...this); } @Override public void setProperties(Properties properties) { } } 使用 注意解实体

1.8K30

源码剖析Spring依赖注入:今天你还不会,你就输了

其次,文章中,我只会展示最核心的代码或关键的。剩下的内容将主要用来讲解原理。如果你真的在学习Spring源码,我希望你能打开你的项目,并跟着我一起深入阅读源码。现在,让我们开始吧。...今天的重点是Spring的依赖注入。基本使用首先,值得注意的是,Spring框架中,依赖注入是bean生成后进行属性赋值的。由于我们的bean通常都是单例模式,所以每个的属性都必须进行注入。...因为注入的点就是先找到set方法,然后填充属性之前,Spring会去解析当前,把当前的所有方法都解析出来。Spring会解析每个方法,得到对应的PropertyDescriptor对象。...查看是否还有,如果有再次循环直到没有。将刚才构造好的注入点全都封装到InjectionMetadata,作为当前Bean对于的注入点集合对象,并缓存。...这是因为静态字段或方法是属于的,而不是属于具体的实例。因此,进行依赖注入时,Spring会注入给具体的实例,而不是整个。我们知道Spring是支持创建原型bean的,也就是多例模式。

25820

面试官问我注解的使用有没有踩过坑

问题背景 很久很久前,我还是青铜的时候(现在依旧是青铜段位)去面试,面试官问我怎么获取,方法上的注解。...我的加密框架monkey-api-encrypt(https://github.com/yinjihuan/monkey-api-encrypt)中,支持了注解标识加解密的功能,其实是通过读取注解,转换成...我们可以用Spring里面提供的AnnotationUtils来读取注解。...,所以我们要获取最原始的,直接使用getSuperclass就可以了,跟第一种方案是一致的,只是第一种看起来有点那啥哈........1、从前端到后端玩转Spring Cloud 2、实战分库分表中间件Sharding-JDBC 3、实战分布式任务调度框架Elastic Job 4、配置中心Apollo实战 5、高并发解决方案之缓存

62430

读后感 | 美团技术《如何优雅地记录操作日志》

AOP,核心思想就是借助Spring AOP去自动探测由OperationLog注解接口标记的业务逻辑,从而为这些业务动态创建代理对象。...Spring AOP中,这个BeanPostProcessor就是AbstractAutoProxyCreator抽象,其主要用于创建代理对象。...Advisor是Spring AOP中独有的术语,AspectJ中并没有等效的术语与其匹配,但其与切面还是有一定相似之处的,或者大家干脆将其视为一个特殊的切面,该切面只能包含一个Advice (通知)...Spring AOP依托JDK动态代理和CGLIB代理技术来创建代理对象,关于这方面的知识参见笔者之前写的一篇文章《Java动态代理》,这里就不再赘述了。 理论知识基本介绍完毕,下面进入实战环节。...2 如何使用oplog-spring-boot-starter 2.1 启动中开启记录操作日志开关 @SpringBootApplication @EnableAspectJAutoProxy(exposeProxy

1.9K10

Spring和SpringMVC父子容器关系初窥

一、背景 最近由于项目的包扫描出现了问题,解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和SpringMVC...目前最常见的一种场景就是一个项目中引入Spring和SpringMVC这两个框架,那么它其实就是两个容器,Spring容器,SpringMVC是其子容器 并且Spring容器中注册的Bean...对于SpringMVC容器中是可见的,而在SpringMVC容器中注册的Bean对于Spring容器中是不可见的,也就是子容器可以看见容器中的注册的Bean,反之就不行。...@Component注解的,并且将它们自动注册到容器中,同时也扫描@Controller,@Service,@Respository这三个注解,因为他们是继承自@Component 项目中我们经常见到还有如下这个配置...> beanType) {   return AnnotationUtils.findAnnotation(beanType, Controller.class) !

1.5K00

Spring和SpringMVC父子容器关系初窥

一、背景   最近由于项目的包扫描出现了问题,解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring...,目前最常见的一种场景就是一个项目中引入Spring和SpringMVC这两个框架,那么它其实就是两个容器,Spring容器,SpringMVC是其子容器,并且Spring容器中注册的Bean...对于SpringMVC容器中是可见的,而在SpringMVC容器中注册的Bean对于Spring容器中是不可见的,也就是子容器可以看见容器中的注册的Bean,反之就不行。   ...1,2两步的配置使得当前springMVC容器中并没有注册带有@Controller注解的Bean,而是把所有带有@Controller注解的Bean都注册Spring这个容器中了,所以springMVC...> beanType) {   return AnnotationUtils.findAnnotation(beanType, Controller.class) !

36030

Spring 中 @Qualifier 注解还能这么用?

以上基本上就是 @Qualifier 注解 Spring 容器中的一些用法了,接下来松哥将通过源码分析,来和小伙伴们一起探讨上面这些功能到底是怎么实现的。 2....return false; } return checkGenericTypeMatch(bdHolder, descriptor); } 这里又是两件事,第一个是调用方法进行判断,这里单纯只是判断...bd.getQualifier 方法,分别以第 1 步中拿到的注解全路径(org.springframework.beans.factory.annotation.Qualifier)和短路径(Qualifier)为参数,去搜索看是否能够获取到一个...如果前面几步还是没有拿到 targetAnnotation,那么接下来就要去上面查找,查看目标上是否有 @Qualifier 注解了(如果我们 B 上添加了 @Qualifier 注解,就会在这里拿到...小结 今天和小伙伴们梳理了一下 @Qualifier 注解的作用,老实说,松哥源码分析的过程中,也 GET 到 Spring 许多新的玩法,感兴趣的小伙伴赶紧去试试吧~

57120
领券