ComponentScan如何工作?

时间:2017-06-07 04:45:05

标签: java spring reflection annotations component-scan

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

但是根据other StackOverflow answers,由于ClassLoader的工作方式,您无法可靠地枚举包中的所有类。那么@ComponentScan似乎如何设法实现这一目标呢?

1 个答案:

答案 0 :(得分:3)

@ComponentScan的工作方式不同。工作流程很快就会出现:

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

来自Spring源代码的类:

  • ComponentScanAnnotationParser
  • AnnotationConfigUtils
  • ClassPathBeanDefinitionScanner
  • BeanDefinitionReaderUtils
  • DefaultListableBeanFactory