非Web Spring Context中的ApplicationContextInitializer?
Posted
技术标签:
【中文标题】非Web Spring Context中的ApplicationContextInitializer?【英文标题】:ApplicationContextInitializer in a non-web Spring Context? 【发布时间】:2012-11-08 12:10:10 【问题描述】:我创建了一个 ApplicationContextInitializer
实现来从客户源 (ZooKeeper) 加载属性并将它们添加到 ApplicationContext
的属性源列表中。
我能找到的所有文档都与 Spring web-apps 相关,但我想在一个独立的消息消费应用程序中使用它。
实例化我的实现、创建上下文然后“手动”将上下文传递给我的实现的正确方法吗?或者我是否缺少框架的一些自动功能,将我的初始化程序应用于我的上下文?
【问题讨论】:
【参考方案1】:我发现通过使用空白上下文进行初始化来实现 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.***Configuration.class );
ctx.refresh()
// Get Beans as normal (e.g. Spring Batch)
JobLauncher launcher = context.getBean(JobLauncher.class);
我希望这会有所帮助!
【讨论】:
【参考方案2】:如果我对问题的理解正确,您可以在 Spring 文档中找到解决方案第 4 节。IoC 容器
这里有一个关于如何启动您的应用程序的示例 - 4.2.2 Instantiating a container
也可以看看5.7 Application contexts and Resource paths
【讨论】:
【参考方案3】:不确定其他版本,但在 Spring 4:
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(yourConfig.class);
【讨论】:
以上是关于非Web Spring Context中的ApplicationContextInitializer?的主要内容,如果未能解决你的问题,请参考以下文章
spring 的配置文件 是上个web.xml 加载spring容器中的/WEB-INF/application.xml 文件
java.lang.ClassNotFoundException:eclipse中的org.springframework.web.context.ContextLoaderListener
interface21 - web - ContextLoaderListener(Spring Web Application Context加载流程)