2012-11-08 13 views
7

Ho creato un'implementazione ApplicationContextInitializer per caricare le proprietà da un'origine commerciale (ZooKeeper) e aggiungerle all'elenco delle origini delle proprietà di ApplicationContext.ApplicationContextInitializer in un contesto Spring non Web?

Tutta la documentazione che riesco a trovare si riferisce alle app Web di Spring, ma desidero utilizzarla in un'applicazione che richiede un messaggio autonomo.

È l'approccio giusto per istanziare la mia implementazione, creare il contesto, quindi passare il contesto alla mia implementazione 'manualmente'? O mi manca qualche caratteristica automatica del framework che applicherà il mio inizializzatore al mio contesto?

risposta

8

Ho trovato abbastanza semplice implementare la strategia di SpringMVC per l'inizializzazione di un contesto inizializzando con un contesto vuoto. Nei normali contesti applicativi, non c'è nulla che usi un ApplicationContextInitializer, quindi è necessario eseguirlo da solo.

Nessun problema, anche se poiché all'interno di una normale applicazione J2SE, dato che si ha la proprietà del blocco del caricatore di contesto, si avrà accesso a ogni fase del ciclo di vita.

// Create context, but dont initialize with configuration by calling 
// the empty constructor. Instead, initialize it with the Context Initializer. 
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); 
MyAppContextInitializer initializer = new MyAppContextInitializer(); 
initializer.initialize(ctx); 

// Now register with your standard context 
ctx.register(com.my.classpath.StackOverflowConfiguration.class); 
ctx.refresh() 

// Get Beans as normal (e.g. Spring Batch) 
JobLauncher launcher = context.getBean(JobLauncher.class); 

Spero che questo aiuti!

0

Non sono sicuro su altre versioni, ma a Spring 4:

AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(yourConfig.class); 
Problemi correlati