Ответ 1
Сноска [2] вашей ссылки:
[2]: Поскольку обработка элементов <import/>
обязательно возникает перед вызовом BeanFactoryPostProcessors, что означает, что даже PropertyPlaceholderConfigurer не мог помочь здесь. Поскольку среда и ее набор PropertySources настроены до обновления контейнера, заполнители элементов могут быть разрешены в отношении среды без каких-либо проблем с жизненным циклом.
UPDATE
В соответствии с javadoc для PropertySourcesPlaceholderConfigurer PropertySourcesPlaceholderConfigurer
- это BeanFactoryPostProcessor
, поэтому в сноске действительно говорится, что импорт разрешен перед установкой PropertySourcesPlaceholderConfigurer, поэтому он не будет работать либо (фактически, в момент разрешения <import/>
конфигуратор может даже не существовать!) Да, когда он будет установлен, он будет посмотрите Environment
, но вы не можете использовать его для решения внутри <import/>
, потому что в это время никакие постпроцессоры не работают. И это включает PropertySourcesPlaceholderConfigurer
.
В основном Spring Настройка контекста XML выглядит примерно так:
- Контекст создан.
-
Environment
. - XML читается (все XML, при необходимости разрешая импорт). Bean.
-
BeanFactoryPostProcessor
устанавливаются и вызывается, обрабатывая определения Bean. -
BeanPostProcessor
. - Beans создаются в соответствии с определениями Bean. Используются BeanPostProcessors.
Это аналогичная проблема, которая приводит к тому, что вы не можете использовать свойство order
для многих постпроцессоров для применения BeanPostProccesor
до BeanFactoryPostProcessor
(чтобы сделать что-то вроде make PropertyPlaceholderConfigurer
place placeholders из @PersistenceContext
): поведение жестко закодировано в контексте приложения Spring, поэтому вам придется обойти его, специализируясь на некоторых классах Spring.