Независимо от производительности сканера Spring зависит размер сканируемого пакета?

В нашем приложении мы столкнулись с проблемами производительности с компонентным сканированием. Это довольно медленно, и его производительность не зависит от количества классов в отсканированном пакете.

Каждая строка, подобная этой, в нашем конфигурационном файле sping:

<context:component-scan base-package="foo.bar" />

добавляет 2 минуты на время запуска нашего приложения. Количество классов в отсканированном пакете не имеет значения - мы испытываем такую ​​же задержку как для пакетов с классами 10 и 1k.

Почему производительность компонентного сканирования не зависит от размера отсканированного пакета?

Мы используем смешанный подход для создания spring beans - мы используем как определения xml, так и проверку компонентов. Может ли это быть причиной такого поведения?

Ответ 1

Что означает Spring, это пройти все классы в пакетах, которые вы даете при сканировании компонентов и если класс имеет компонент, репозиторий или службу, он регистрирует bean в контексте. Поэтому число классов имеет значение. Вы должны сканировать только пакеты, в которых есть аннотированные классы (для сканирования не аннотированных классов потребуется время). Также вы можете использовать только тег сканирования одного компонента и список всех пакетов. Использование сканирования xml и компонентов не должно быть проблемой, если они не дублируются.