我创建了一个ApplicationContextInitializer
实现来从客户源 (ZooKeeper) 加载属性并将它们添加到ApplicationContext
的属性源列表中。
我能找到的所有文档都与 Spring web-apps 相关,但我想在一个独立的消息消费应用程序中使用它。
实例化我的实现、创建上下文然后“手动”将上下文传递给我的实现的正确方法吗?或者我是否缺少将我的初始化程序应用于我的上下文的框架的一些自动功能?
我创建了一个ApplicationContextInitializer
实现来从客户源 (ZooKeeper) 加载属性并将它们添加到ApplicationContext
的属性源列表中。
我能找到的所有文档都与 Spring web-apps 相关,但我想在一个独立的消息消费应用程序中使用它。
实例化我的实现、创建上下文然后“手动”将上下文传递给我的实现的正确方法吗?或者我是否缺少将我的初始化程序应用于我的上下文的框架的一些自动功能?
我发现通过使用空白上下文进行初始化来实现 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);
我希望这有帮助!
不确定其他版本,但在 Spring 4 中:
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(yourConfig.class);