为了账号安全,请及时绑定邮箱和手机立即绑定

spring扫描组件时会扫描该组件的父类及接口么?有没有明确的文档说明?

spring扫描组件时会扫描该组件的父类及接口么?有没有明确的文档说明?

墨色风雨 2019-01-18 22:14:03
如题。如题。如题。
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

自问自答,提出问题第二天就已通过跟踪源码找到答案,说说结果给后人以经验.
为什么会有这样的问题,来自于springcloud feign 远程调用场景,controller继承了api service,在service的方法上定义RequestMapping,controller中不定义,spring同样能扫描到,完成请求地址与方法的映射,这个过程蹊跷的地方在于,接口中定义的注解并不会被类继承,其唯一可以识别到的方式就是 扫描父类,但是一般似乎从来没这么用过,在关于spring源码解析的文章当中也很少有提及扫描组件会去查找父类中的注解,带着问题去跟踪源码,发现,在扫描组件过程中反复调用了 这么一个类AnnotatedElementUtils,其中的方法searchWithGetSemantics,语义化搜索,什么叫语义化搜索,该类的注释已明确给出了答案.
` * <p>{@code AnnotatedElementUtils} defines the public API for Spring's

  • meta-annotation programming model with support for annotation attribute
  • overrides. If you do not need support for annotation attribute
  • overrides, consider using {@link AnnotationUtils} instead. * <p>Find semantics are much more exhaustive, providing
  • get semantics plus support for the following:

*

  • <ul>
  • <li>Searching on interfaces, if the annotated element is a class
  • <li>Searching on superclasses, if the annotated element is a class
  • <li>Resolving bridged methods, if the annotated element is a method
  • <li>Searching on methods in interfaces, if the annotated element is a method
  • <li>Searching on methods in superclasses, if the annotated element is a method
  • </ul>`
查看完整回答
反对 回复 2019-03-01
?
慕容森

TA贡献1853条经验 获得超18个赞

这里有非常好的例子展示spring扫描的范围设定
符合以下条件的会被扫描并创建bean

  • 类有@Component注解
  • 且包名包含在@ComponentScan注解范围内
  • 或包含在@ComponentScan.Filter范围内

如果子类符合条件,但父类没有包含在扫描范围内, 子类会创建,但父类不会创建, 因为不符合instanceof条件,即不能说父类子类
如果父类被创建, 子类有@Component注解,但不在指定Filter范围内,也会创建,因为符合instanceof条件,因为子类一定是父类

@Component注解没有继承关系(@Inherited), 所以想被创建必须首先要有这个注解才行.
或创建你自己的可继承的注解过的接口.

如:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Component 
@Inherited
public @interface BusinessService {
}
查看完整回答
反对 回复 2019-03-01
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

另外 如果是spring boot的其实可以自己测试 看下结果的 http://ip:port/beans

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 666 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信