12

@ComponentScan将为您提供包(或/ )@Component中带有注释的所有类的列表。为此,我想他们使用反射来枚举包中的所有类并找到带有该注释的类。@Service@Repository

但是,根据StackOverflow 的其他答案,由于工作方式的原因,您无法可靠地枚举包中的所有类ClassLoader。那么@ComponentScan看似如何做到这一点呢?

4

1 回答 1

8

@ComponentScan工作方式不同。工作流程很快就放在这里:

  • 查找同一文件夹和所有子文件夹中的所有 .class 文件
  • 读取 .class 文件并将其包装到Resource对象中
  • 检查类是否具有使其成为良好候选者的注释
  • 如果类是好的候选者,则从中创建 bean。

从 Spring 源代码中查看的类:

  • ComponentScanAnnotationParser
  • AnnotationConfigUtils
  • ClassPathBeanDefinitionScanner
  • BeanDefinitionReaderUtils
  • DefaultListableBeanFactory
于 2017-06-07T06:40:00.167 回答