org.springframework.web.method.ControllerAdviceBean#isApplicableToBeanType 作用
2024-10-21 13:06:21
org.springframework.web.method.ControllerAdviceBean#isApplicableToBeanType(@Nullable Class<?> beanType)
判断当前类是否被ControllerAdviceBean修饰,判断依据位 ControllerAdviceBean上设置的注解@ControllerAdvice内的参数
package org.springframework.web.bind.annotation; import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component; @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface ControllerAdvice { @AliasFor("basePackages")
String[] value() default {}; @AliasFor("value")
String[] basePackages() default {}; Class<?>[] basePackageClasses() default {}; Class<?>[] assignableTypes() default {}; Class<? extends Annotation>[] annotations() default {};
}
其内部使用 HandlerTypePredicate beanTypePredicate 进行判断,如果@ControllerAdvice注解内无参数 则可以修饰所有类。
由该段代码判断:
ControllerAdvice annotation = (beanType != null ?
AnnotatedElementUtils.findMergedAnnotation(beanType, ControllerAdvice.class) : null); if (annotation != null) {
this.beanTypePredicate = HandlerTypePredicate.builder()
.basePackage(annotation.basePackages())
.basePackageClass(annotation.basePackageClasses())
.assignableType(annotation.assignableTypes())
.annotation(annotation.annotations())
.build();
}
else {
this.beanTypePredicate = HandlerTypePredicate.forAnyHandlerType();
}
HandlerTypePredicate.forAnyHandlerType(); 改方法实现如下:
return new HandlerTypePredicate(Collections.emptySet(), Collections.emptyList(), Collections.emptyList());
=====
实际会调用org.springframework.web.method.HandlerTypePredicate#test
if (!hasSelectors()) {
return true;
}
org.springframework.web.method.HandlerTypePredicate#hasSelectors private boolean hasSelectors() {
return (!this.basePackages.isEmpty() || !this.assignableTypes.isEmpty() || !this.annotations.isEmpty());
}
最新文章
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一)
- python_函数
- Ant打包
- Bash Shell的操作环境
- JDK1.7 ConcurrentHashMap 源码浅析
- js判断手机还是pc并跳转相关页面
- const和readonly差别
- sort命令总结
- 【Stackoverflow好问题】Java += 操作符实质
- 调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment之我的解决方法
- memcached 在windows中的部署和使用
- List查询重复值的个数,并根据重复的数目从多到少排列
- git强制覆盖更新
- Backbone基础笔记
- MySQL技术内幕:SQL编程 第2章 数据类型 读书笔记
- 学习迭代器实现C#异步编程——仿async/await(一)
- 如何创建和配置Solaris10 zones (ZT)
- C# List(T).Reverse 方法 顺序反转
- ALTER USER USER() IDENTIFIED BY &#39;password&#39;;
- Android本地消息推送
热门文章
- rest framework 之解析器
- Httpd服务进阶知识-LAMP架构概述
- out文件 dev c++
- C++学习(10)—— 对象模型和this指针
- Fire Balls 08——子弹的消失,当子弹击中自身时不可发射子弹
- 在linux系统中如何通过shell脚本批量设置redis键值对
- excel打开提示 文件格式和扩展名不匹配。文件可能已损坏或不安全。除非您信任其来源,否则请勿打开。是否仍要打开它?
- P1850 换教室[dp+期望]
- 加深对 JavaScript This 的理解
- Java验证jwt token