Domanda

Ho una manciata di progetti che utilizzano un progetto per il modello di dati.Ognuno di questi progetti ha il suo applicationContext.xml file con un mazzo di dati ripetitivi cose all'interno di esso.

Mi piacerebbe avere un modelContext.xml file e l'altro per il mio ui.xml, etc.

Posso fare questo?

È stato utile?

Soluzione

Dal Primavera Docs (v Sezione 2.5.5 3.2.2.1.):

Spesso può essere utile dividere definizioni del contenitore in più I file XML.Un modo per poi caricare un ambito di applicazione, che è configurato da tutte queste XML frammenti è quello di utilizzare l'applicazione contesto costruttore che prende più Risorse località.Con un bean factory, un fagiolo definizione reader possono essere utilizzati più volte a leggere definizioni di ogni file.

In generale, la Primavera della squadra preferisce il al di sopra di approccio, dal momento che tiene contenitore di file di configurazione inconsapevole il fatto che essi sono combinato con gli altri.Alternativa l'approccio è quello di utilizzare uno o più le occorrenze dell'elemento a carico di fagioli definizioni da un altro il file (o i file).Diamo un'occhiata a un esempio:

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

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

In questo esempio, esterno bean le definizioni vengono caricati da 3 file, services.xml, messageSource.xml, e themeSource.xml.Tutti i percorsi di posizione sono considerati relativi all' file di definizione fare l'importazione, così services.xml in questo caso deve essere nella stessa directory o classpath posizione del file che fa il l'importazione, mentre messageSource.xml e themeSource.xml deve essere in risorse qui sotto la posizione del importazione di file.Come si può vedere, un barra è in realtà ignorato, ma dato che questi sono considerati i percorsi relativi, probabilmente è meglio modulo di non utilizzare la barra a tutti.Il contenuto del file importati deve essere valido XML bean definizione i file in base alla Primavera Schema o DTD, tra cui il livello superiore elemento.

Altri suggerimenti

Lo facciamo nei nostri progetti, al lavoro, utilizzando il classpath* risorsa loader in Primavera.Per una certa applicazione, tutti appcontext file contenente l'id dell'applicazione verrà caricata:

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

Sì, è possibile farlo tramite l'elemento di importazione.

<import resource="services.xml"/>

Ogni elemento attributo di risorsa è un percorso valido (ad es.classpath:foo.xml)

Dato che Nicola mi ha indicato ho trovato questo nella documentazione.Mi permette di scegliere in fase di runtime, il fagiolo contesti che mi interessa.

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

Ecco quello che ho fatto per uno dei miei progetti.Nel web.xml file, è possibile definire il bean Spring file che si desidera l'applicazione per l'uso:

  <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 questo non è definito nel web.xml, cerca automaticamente per /WEB-INF/applicationContext.xml

Un'altra cosa da notare è che anche se si può fare questo, se non sei un grande fan di XML si possono fare un sacco di roba in Primavera 2.5 con annotazioni.

Sì, è possibile utilizzare il tag all'interno del "Master" file bean.Ma che cosa circa il perché?Perché non elenca i file in contextConfigLocation contesto param della wab.xml o als località matrice del fagiolo di fabbrica?

Penso che più i file sono molto più facili da gestire.Si può scegliere solo alcuni di loro per un test, è sufficiente aggiungere rinominare o rimuovere una parte dell'applicazione e si può boundle diverse applicazioni con lo stesso file di configurazione (una webapp e una riga di comando versione con qualche sovrapposizione bean definizioni).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top