Pergunta

Eu tenho alguns projetos que usam um projeto para o modelo de dados. Cada um desses projetos possui seu próprio arquivo ApplicationContext.xml com um monte de dados repetitivos de dados nele.

Eu gostaria de ter um arquivo modelcontext.xml e outro para o meu ui.xml, etc.

Posso fazer isso?

Foi útil?

Solução

De Spring Docs (v 2.5.5 Seção 3.2.2.1.):

Muitas vezes, pode ser útil dividir as definições de contêiner em vários arquivos XML. Uma maneira de carregar um contexto de aplicativo configurado de todos esses fragmentos XML é usar o construtor de contexto do aplicativo que leva vários locais de recursos. Com uma fábrica de feijão, um leitor de definição de feijão pode ser usado várias vezes para ler as definições de cada arquivo, por sua vez.

Geralmente, a equipe da primavera prefere a abordagem acima, pois mantém os arquivos de configuração de contêineres sem saber do fato de estarem sendo combinados com outras pessoas. Uma abordagem alternativa é usar uma ou mais ocorrências do elemento para carregar definições de feijão de outro arquivo (ou arquivos). Vejamos uma amostra:

<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>

<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>

Neste exemplo, as definições externas de feijão estão sendo carregadas de 3 arquivos, Service.xml, MessageRce.xml e temeSource.xml. Todos os caminhos de localização são considerados em relação ao arquivo de definição que faz a importação; portanto, o Services.xml neste caso deve estar no mesmo diretório ou localização do caminho de classe que o arquivo que faz a importação, enquanto o MessageRce.xml e o temeSource.xml devem estar em um recurso Localização abaixo da localização do arquivo de importação. Como você pode ver, uma barra principal é realmente ignorada, mas, como são considerados caminhos relativos, provavelmente é melhor não usar a barra. O conteúdo dos arquivos que estão sendo importados devem ser arquivos de definição de feijão XML válidos de acordo com o esquema da mola ou o DTD, incluindo o elemento de nível superior.

Outras dicas

Fazemos isso em nossos projetos no trabalho, usando o carregador de recursos ClassPath* na primavera. Para um determinado aplicativo, todos os arquivos AppContext que contêm o ID do aplicativo serão carregados:

classpath*:springconfig/spring-appname-*.xml

Sim, você pode fazer isso através do elemento de importação.

<import resource="services.xml"/>

O atributo de recurso de cada elemento é um caminho válido (por exemplo, classe: foo.xml)

Dado o que Nicholas me indicou, encontrei isso nos documentos. Isso me permite escolher em tempo de execução nos contextos de feijão em que estou interessado.

GenericApplicationContext ctx = new GenericApplicationContext();
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
xmlReader.loadBeanDefinitions(new ClassPathResource("modelContext.xml"));
xmlReader.loadBeanDefinitions(new ClassPathResource("uiContext.xml"));
ctx.refresh();

Aqui está o que eu fiz para um dos meus projetos. Na tua web.xml Arquivo, você pode definir os arquivos de feijão da mola que deseja que seu aplicativo use:

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/applicationContext.xml
      /WEB-INF/modelContext.xml
      /WEB-INF/ui.xml
    </param-value>
  </context-param>

Se isso não estiver definido em seu web.xml, ele procura automaticamente /WEB-INF/applicationContext.xml

Outra coisa a observar é que, embora você possa fazer isso, se você não é um grande fã de XML, poderá fazer muitas coisas na primavera 2.5 com anotações.

Sim, você pode usar a tag dentro do arquivo "mestre". Mas e o porquê? Por que não listar os arquivos no parâmetro de contexto de contextConfiglocation da matriz WAB.xml ou ALS da fábrica de feijões?

Eu acho que os arquivos Mutliple são muito mais fáceis de lidar. Você pode escolher apenas alguns deles para um teste, basta adicionar renomear ou remover uma parte do aplicativo e você pode vincular diferentes aplicativos com os mesmos arquivos de configuração (um aplicativo da web e uma versão de comando com algumas definições sobrepostas de feijão).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top