Если вы просто хотите получить значение переменной, определенной в контексте контейнера, и использовать его в качестве строки без создания объекта-заполнителя, вы можете сделать следующее (это было проверено в Tomcat, но, скорее всего, работает так же в других серверах контейнеров / JEE, таких как WebSphere):
Определите переменную среды в Tomcat context.xml
(или используйте синтаксис вашего собственного сервера):
<Environment type="java.lang.String" name="myString" value="hello"/>
В контексте XML-файла Spring:
Добавить пространство имен jee к корневому элементу:
xmlns:jee="http://www.springframework.org/schema/jee"
и в xsi:schemaLocation
:
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
Теперь вы можете легко найти значение (обратите внимание, что вам не нужно указывать java:/comp/env
, Spring сделает это за вас):
<jee:jndi-lookup id="myStringValue"
jndi-name="myStringValue"
expected-type="java.lang.String" />
Затем вы можете использовать его, например, передать его конструктору компонента в качестве ссылки:
<bean id="observationFileManager" class="my.service.Bean">
<constructor-arg name="myString" ref="myStringValue" />
</bean>
Боб получит "hello"
в качестве аргумента конструктора.
РЕДАКТИРОВАТЬ:
Если вы запускаете свой контекст Spring вне контейнера (Tomcat, Websphere ...) для интеграционного тестирования, поиск не будет работать. Поэтому, если у вас есть специальный контекст теста, просто добавьте следующее определение String
, которое переопределит jee:lookup
, и установите значение, которое вы хотите использовать для тестирования:
<!-- This overrides the jndi jee:lookup used in the real context -->
<bean id="mediaFilesBaseDirPath" class="java.lang.String" >
<constructor-arg value="Z:" />
</bean>