ApplicationContextInitializer在非Web Spring上下文中?

Eng*_*_DJ 7 java spring applicationcontext

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

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

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

小智 9

我发现通过初始化空白上下文来实现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);
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!


Vas*_*man 1

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

有关如何启动应用程序的示例请参见此处 - 4.2.2 实例化容器

另请参阅5.7 应用程序上下文和资源路径