Как работает ComponentScan?

@ComponentScan предоставит вам список всех классов с аннотацией @Component в пакете (или _3 _ / _ 4_). Я полагаю, что для этого они используют отражение, чтобы перечислить все классы в пакете и найти те, которые имеют эту аннотацию.

Однако, согласно другим ответам StackOverflow, вы можете ненадежно перечислить все классы в пакете из-за того, как ClassLoaderworks. Так как же, по-видимому, @ComponentScan это удается?


person David says Reinstate Monica    schedule 07.06.2017    source источник


Ответы (1)


@ComponentScan работает иначе. Рабочий процесс кратко изложен так:

  • Найдите все файлы .class в одной папке и во всех подпапках
  • Прочитать файл .class и превратить его в объект Resource
  • Проверьте, есть ли у класса аннотации, которые сделают его хорошим кандидатом
  • Если класс - хороший кандидат, создайте из него bean-компонент.

Классы из исходного кода Spring для просмотра:

  • ComponentScanAnnotationParser
  • AnnotationConfigUtils
  • ClassPathBeanDefinitionScanner
  • BeanDefinitionReaderUtils
  • DefaultListableBeanFactory
person almirp    schedule 07.06.2017