ApplicationContextInitializer在非Web Spring上下文中?

时间:2012-11-08 12:10:10

标签: java spring applicationcontext

我创建了一个ApplicationContextInitializer实现,用于从客户源(ZooKeeper)加载属性,并将它们添加到ApplicationContext的属性源列表中。

我能找到的所有文档都与Spring网络应用程序有关,但我想在一个独立的消息应用程序中使用它。

是否有正确的方法来实例化我的实现,创建上下文,然后将“上下文”传递给我的“手动”实现?或者我错过了将我的初始化程序应用于我的上下文的框架的一些自动功能?

3 个答案:

答案 0 :(得分:8)

我发现通过初始化空白上下文来实现SpringMVC初始化上下文的策略非常简单。在普通的应用程序上下文中,没有任何东西使用ApplicationContextInitializer,因此你必须自己执行它。

没问题,但是在正常的J2SE应用程序中,如果您拥有上下文加载器块的所有权,则可以访问生命周期的每个阶段。

// 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);

我希望这有帮助!

答案 1 :(得分:1)

如果我正确理解了问题,您可以在Spring文档中找到解决方案第4节.IoC容器

有关如何启动应用的示例,请访问4.2.2 Instantiating a container

另请查看5.7 Application contexts and Resource paths

答案 2 :(得分:0)

不确定其他版本,但在Spring 4中:

AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(yourConfig.class);