Встраивать конфигурацию XML непосредственно в контекст приложения Spring - PullRequest
2 голосов
/ 29 ноября 2008

У меня есть объект Java, который может конфигурировать себя, учитывая описание конфигурации XML (оно также принимает и другие описания, но сейчас я интересуюсь XML). Мне интересно, могу ли я встроить описание XML непосредственно в описание контекста приложения Spring. Я представляю что-то вроде:

<bean id="myXMLConfiguredBean" class="com.example.Foo">
  <constructor-arg type="xml">
    <myconfig xmlns="http://example.com/foo/config">
      <bar>42</bar>
    </myconfig>
  </constructor-arg>
</bean>

но я понятия не имею, возможно ли это - или что-то подобное - возможно. Я понимаю, что могу встроить myconfig в раздел CDATA, но это кажется немного уродливым.

Ответы [ 2 ]

2 голосов
/ 30 ноября 2008

Spring's XSD позволяет <constructor-arg> содержать любой XML через:

<xsd:element name="constructor-arg">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="description" minOccurs="0" />
        <xsd:choice minOccurs="0" maxOccurs="1">
          <xsd:element ref="bean" />
          <xsd:element ref="ref" />
          <xsd:element ref="idref" />
          <xsd:element ref="value" />
          <xsd:element ref="null" />
          <xsd:element ref="list" />
          <xsd:element ref="set" />
          <xsd:element ref="map" />
          <xsd:element ref="props" />
          <!-- Any XML -->
          <xsd:any namespace="##other" processContents="strict" />
        </xsd:choice>
      </xsd:sequence>
      ...
  </xsd:complexType>
</xsd:element>

Где атрибуты processContents могут иметь одно из трех значений

строгий: должно быть объявление верхнего уровня для доступного элемента, или элемент должен иметь xsi:type, и элемент должен быть · действительным · в зависимости от ситуации.

Итак, если в вашем XML-файле конфигурации есть схема, и вы правильно импортируете ее, это должно работать.

Затем вам необходимо зарегистрировать PropertyEditor для вашего XML, используя CustomEditorConfigurer

Надеюсь, это поможет

0 голосов
/ 01 декабря 2008

Не будет ли чище, если у вашего компонента есть свойство, сообщающее ему местоположение файла конфигурации, и он загружает конфигурацию из пути к классам (или абсолютного местоположения в файловой системе)? Таким образом, ваша конфигурация Spring выглядит чище, и вам легче редактировать конфигурацию XML вашего компонента, поскольку она находится в отдельном файле.

Возможно, вы даже сможете сделать это, используя функцию ресурсов в контексте приложения Spring.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...