2012-01-19 19 views
11

Sono nuovo di primavera e ho ottenuto una situazione che progetto singolo con più moduli, tra cui un modulo web. Il modulo Web utilizza Spring MVC, ma mi chiedevo se potevo avere la configurazione principale di Spring a livello di progetto che si occupasse dell'intero progetto, così da poter trarre tutti i vantaggi del framework Spring.Spring configuration in multi-module project

main 
    -module1 
    -module2 
    -web 
     +spring3.1, spring-security 

Quale sarebbe l'impostazione migliore per questo caso?

risposta

6

Il layout di compilazione e il runtime CLASSPATH sono due cose diverse. Anche se si definiscono file separati applicationContext.xml o classi @Configuration in diversi moduli, è possibile che vengano uniti in un singolo CLASSPATH.

Detto questo, module1 e module2 possono dichiarare i propri contesti, ma poiché CLASSPATH viene unito in fase di runtime, verrà creato solo un singolo contesto principale. Inoltre, se si sceglie di utilizzare la scansione CLASSPATH in un modulo, è possibile che vengano raccolte classi (bean) annotate con @Service in altri moduli.

Nel modulo web, che dovrebbe anche avere dipendenze sulle librerie di base Spring, dipenderà anche da spring-web, MVC e spring-security. Questo modulo creerà il contesto child web, che ha accesso al contesto principale ma non viceversa.

Ovviamente si dovrebbe avere una sola copia di ogni libreria nel super-JAR (ear?)

8

Abbiamo questo tipo di architettura dove lavoro. Abbiamo deciso di utilizzare ContextLoaderListener (Listener di eventi di primavera) nel modulo Web.

Poi, nel serverApplicationContext.xml, importiamo tutti i file di contesto moduli:

<import resource="classpath*:module1ApplicationContext.xml" /> 
<import resource="classpath*:module2ApplicationContext.xml" /> 
... 

Così si leva il carico contesto primavera durante l'inizializzazione del contesto dell'applicazione web.

Problemi correlati