Ссылка на значение из весеннего конфига
Сначала немного информации о настройке:
У меня есть мультитенантное приложение на основе пружин. Многопользовательская библиотека поддержки - это инструмент, разработанный моей компанией, и я должен использовать его. Как это работает, так это то, что перед сервлетом для приложения устанавливается перехватчик. По запросу, попавшему в сервлет, он загружает конфигурацию пружины, специфичную для арендатора, для "материала", необходимого для арендатора, указанного в URL, попадающем в сервлет.
Как уже говорилось, выше всего лишь немного фона. Теперь к вопросу / вопросу:
Что я хочу сделать, так это создать в загруженной конфигурации клиента значение, которое я могу использовать для ввода в нужное место. Итак, есть ли способ, которым я могу просто определить константу в конфигурации весны, а затем ссылаться на нее через @Value
или же @Resource
в коде Java?
За этим не будет никакой реализации bean-компонента, это будет просто и только ключ / значение, на которое я могу ссылаться, когда это необходимо в моем приложении по имени. Итак, что-то с эффектом:
<bean name="MyIdentifier">
<property name="theId" value="1001" />
</bean>
И тогда я могу сделать что-то подобное?
@Value{MyIdentifier.theId}
String theId;
И пусть Spring осознает и внедрит ценность. Проблема в том, что, выполняя что-то похожее на Spring, жалуется, что для bean-компонента нет реализации. Обратите внимание, класс не указан для компонента. Причина, по которой я хочу это сделать, заключается в том, что каждый файл конфигурации арендатора будет содержать этот компонент, но фактическое значение будет отличаться для каждого клиента.
Есть ли какой-либо другой тип для использования в конфигурации, чтобы сделать это? Если да, то какие схемы должны быть в конфиге?
Я предполагаю, что я либо пытаюсь заставить Spring делать что-то не предназначенное, либо это так просто, что я не вижу этого, потому что слишком долго на него смотрю. В любом случае спасибо за помощь.
1 ответ
Вы не можете создать тег bean в файле конфигурации, не предоставив реализацию класса. Если вы хотите ввести значение поля, вы должны вместо этого перейти к файлу свойств.
Создайте файл свойств, как показано ниже:
application.properties
theId=1001
Загрузите файл свойств в вашей конфигурации:
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="locations">
<list>
<value>classpath:application.properties</value>
</list>
</property>
</bean>
И получить доступ к собственности в вашем конкретном классе:
@Value("${theId}")
String theId;