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());
}

最新文章

  1. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一)
  2. python_函数
  3. Ant打包
  4. Bash Shell的操作环境
  5. JDK1.7 ConcurrentHashMap 源码浅析
  6. js判断手机还是pc并跳转相关页面
  7. const和readonly差别
  8. sort命令总结
  9. 【Stackoverflow好问题】Java += 操作符实质
  10. 调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment之我的解决方法
  11. memcached 在windows中的部署和使用
  12. List查询重复值的个数,并根据重复的数目从多到少排列
  13. git强制覆盖更新
  14. Backbone基础笔记
  15. MySQL技术内幕:SQL编程 第2章 数据类型 读书笔记
  16. 学习迭代器实现C#异步编程——仿async/await(一)
  17. 如何创建和配置Solaris10 zones (ZT)
  18. C# List(T).Reverse 方法 顺序反转
  19. ALTER USER USER() IDENTIFIED BY &#39;password&#39;;
  20. Android本地消息推送

热门文章

  1. rest framework 之解析器
  2. Httpd服务进阶知识-LAMP架构概述
  3. out文件 dev c++
  4. C++学习(10)—— 对象模型和this指针
  5. Fire Balls 08——子弹的消失,当子弹击中自身时不可发射子弹
  6. 在linux系统中如何通过shell脚本批量设置redis键值对
  7. excel打开提示 文件格式和扩展名不匹配。文件可能已损坏或不安全。除非您信任其来源,否则请勿打开。是否仍要打开它?
  8. P1850 换教室[dp+期望]
  9. 加深对 JavaScript This 的理解
  10. Java验证jwt token