Независимо от производительности сканера Spring зависит размер сканируемого пакета?
В нашем приложении мы столкнулись с проблемами производительности с компонентным сканированием. Это довольно медленно, и его производительность не зависит от количества классов в отсканированном пакете.
Каждая строка, подобная этой, в нашем конфигурационном файле sping:
<context:component-scan base-package="foo.bar" />
добавляет 2 минуты на время запуска нашего приложения. Количество классов в отсканированном пакете не имеет значения - мы испытываем такую же задержку как для пакетов с классами 10 и 1k.
Почему производительность компонентного сканирования не зависит от размера отсканированного пакета?
Мы используем смешанный подход для создания spring beans - мы используем как определения xml, так и проверку компонентов. Может ли это быть причиной такого поведения?
Ответы
Ответ 1
Что означает Spring, это пройти все классы в пакетах, которые вы даете при сканировании компонентов
и если класс имеет компонент, репозиторий или службу, он регистрирует bean в контексте. Поэтому число классов имеет значение.
Вы должны сканировать только пакеты, в которых есть аннотированные классы (для сканирования не аннотированных классов потребуется время).
Также вы можете использовать только тег сканирования одного компонента и список всех пакетов. Использование сканирования xml и компонентов не должно быть проблемой, если они не дублируются.