У меня есть два компонента (класс A и класс B), определенные в файле XML. Когда я их запускаю, DefaultListableBeanFactory сначала создает экземпляр класса A, затем экземпляр класса B. Затем я копирую классы в отдельный пакет и вношу некоторые незначительные изменения. Когда я запускаю классы из нового пакета, DefaultListableBeanFactory сначала создает экземпляр класса B, а затем экземпляр класса A. Почему Spring изменила порядок инициализации? Это не кажется случайным (то есть в старом пакете всегда начинается класс A, в новом пакете всегда начинается класс B). Я могу (и, вероятно, должен) добавить тег «зависит от» к определению класса B, чтобы обеспечить согласованный порядок начала, но я хотел бы знать, почему он работал в старом пакете.Какой порядок весенних бобов?
1
A
ответ
0
Весна будет использовать ClassPathBeanDefinitionScanner
, чтобы найти все ваши компоненты и зарегистрировать их в BeanDefinitionRegistry
. Внутри он будет использовать PathMatchingResourcePatternResolver
. Бобы будут добавлены в том порядке, в котором они будут обнаружены, а позже весна будет перебирать их и загружать в этом порядке, разрешая необходимые зависимости (см. DefaultListableBeanFactory.preInstantiateSingletons
).
Идея механизма Spring заключается в том, чтобы скрыть от вас все это и гарантировать хорошо построенный графический объект в контексте вашего приложения, как только ваши определения верны (Spring может создать экземпляр вашего компонента, Spring может разрешить свои зависимости ...)
от DefaultListableBeanFactory
:
/** List of bean definition names, in registration order */
private final List<String> beanDefinitionNames = new ArrayList<String>(64);
Смежные вопросы
- 1. Порядок загрузки весенних бобов
- 2. Жизненный цикл весенних бобов
- 3. Резолюция о проверке весенних бобов
- 4. Игнорирование инъекции весенних бобов, если класс недоступен
- 5. Использование весенних сессионных бобов без весны MVC
- 6. Исключение исключений весенних бобов при запуске сервера
- 7. понимание областей весенних бобов в веб-приложении
- 8. Как получить данные из класса весенних бобов?
- 9. Порядок инициализации весенних аспектов/советников
- 10. Как избежать извлечения весенних бобов из контекста приложения в webapp?
- 11. Включить JSP Пользовательский taglib для использования весенних бобов
- 12. Мониторинг весенних бобов с JavaMelody в проекте Spring-Boot
- 13. Как я могу получить подробный журнал для загрузки Весенних бобов?
- 14. Создание экземпляров весенних бобов в динамически создаваемых классах
- 15. зачем мне нужна «партии:» префикс в моих весенних бобов
- 16. Замена инъекции весенних бобов через XML с помощью аннотационной инъекции
- 17. Как установить порядок сборки бобов весной?
- 18. Какой весенний артефакт должен зависеть только за создание бобов?
- 19. Практика загрузки весенних фасоли
- 20. При внутривенном введении списка бобов, является порядок в списке же, как и в установленном порядке бобов
- 21. Какой порядок исполнения сообщения?
- 22. Весна: Как обеспечить порядок регистрации бобов в контейнере?
- 23. Как я могу обеспечить порядок загрузки весенних бобах?
- 24. Вставка значений весенних бобах
- 25. Получение времени инициализации весенних фасонов
- 26. Лучшая практика получения весенних бобах данного типа
- 27. Проблема с автопогрузкой весенних бобов в слое композитора для ZKoss после обновления
- 28. Есть ли способ объявить два экземпляра весенних бобов из того же класса с аннотацией?
- 29. Почему два экземпляра контроллеров весенних бобов создаются в приложении Spring MVC?
- 30. Какой порядок вызовов getTrace возвращает?
Порядка инициализации боба не имеет значения, так как поля вводятся после создания боба. Единственная проблема, когда порядок будет иметь значение, - это когда бит необходим в аргументе конструктора другого класса, но Spring замечает это и решит его. –
Как вы говорите, вы не должны зависеть от этого. Если две боны действительно зависят друг от друга, Spring будет следить за тем, чтобы зависимая была инициализирована после зависимого пользователя. Кроме того, это все догадывается. Возможно, полные имена классов помещаются в хэш-карту, и это тот порядок, в который они возвращаются. – biziclop
Ну, на самом деле класс B зависит от побочного эффекта от класса A, но поскольку он всегда работал в старом пакете и всегда работает на другие разработчики компьютеров в новом пакете, никто не заметил зависимости. – user2414208