2013-10-01 14 views
7

Ho un'applicazione web basata sulla molla di lavoro. Ora voglio riutilizzare le sue parti anche per un altro progetto. Pertanto ho due domande:Come impacchettare la libreria basata su molla per il riutilizzo?

  1. Qual è il modo consigliato per comprimere tali funzionalità come libreria riutilizzabile? File JAR con contesto XML dell'applicazione o JAR + extra XML? Qualcos'altro?
  2. Come incorporare tale libreria in un altro progetto Spring (web-) (spazio dei nomi diverso - pacchetto) in modo tale che ad es. @Autowired funzionerà? Immagino che il semplice JAR su classpath non sia sufficiente - come fare riferimento al contesto applicativo di lib etc? Quali altri passaggi sono necessari?

risposta

1

È necessario utilizzare un tipo di confezione che possa dire da cosa dipende. Un'opzione popolare è quella di utilizzare la confezione Maven, fornendo file pom.xml che spiegano le dipendenze. Avresti quindi fatto uscire Maven dall'app quando hai finito.

Quando lo si utilizza, è necessario fare riferimento al modello di configurazione condivisa nella configurazione delle molle delle app. È possibile importarlo direttamente:

<import resource="classpath*:/META-INF/path/to/otherAppContext.xml" /> 

Si presume che in realtà si voglia condividere la configurazione del contesto di primavera. Se stai fornendo classi riusabili (solo), di solito non è necessario condividere le configurazioni del contesto.

+0

quindi si consiglia il codice in questo modo è "indipendente" dalla primavera? ma perché non vuoi usare DI? come gestisci le dipendenze tra le classi? – sodik

4

L'approccio che utilizzo è semplicemente quello di garantire che i frammenti del contesto dell'applicazione risiedano in una posizione ben nota all'interno del file jar della libreria (personalmente io uso META-INF/spring). Così potrei avere un po 'di configurazione di sicurezza comune e fagioli in un file chiamato META-INF/spring/common-security-context.xml

nell'applicazione client (quello che utilizza la libreria) è possibile includere i servizi e fagioli di tutti vostre librerie condivise avendo un importazione come il seguente all'interno del contesto dell'applicazione:

<import resource="classpath*:META-INF/spring/*-context.xml" /> 

(notare l'asterisco dopo classpath). Questo individuerà i file i cui nomi corrispondono allo schema META-INF/spring/*-context.xml da qualsiasi file jar o radice del percorso di classe visibile all'applicazione in esecuzione e li aggregano in un unico contesto logico. Regola il carattere jolly come meglio credi.

Ovviamente è necessario un po 'di strategia per evitare conflitti di nomi di servizi/bean che potrebbero verificarsi se si inizia a utilizzarlo ampiamente.

+0

grazie, fondamentalmente entrambi raccomandate il contesto XML del pacchetto all'interno di JAR e poi lo importa ... grazie per il suggerimento – sodik

+0

@sodik entrambi abbiamo fornito lo stesso modo di farlo, se necessario. Tuttavia, come ho detto, di solito non è necessario condividere effettivamente la configurazione xml, solo le classi stesse. – eis

Problemi correlati