在 Spring 的 Classpath 中发现 Plugin-JARS
有没有办法在Spring中发现一个 “插件”-来自类路径的 JAR, 并动态加载其applicationContext.xml?
Is there a way in Spring to discover a
"plugin"-JAR from the classpath,
and load its applicationContext.xml dynamicaly?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我通过以下方法使用 Spring 实现了一个类似插件的系统:
每个插件必须包含一个具有特定名称和包前缀的 spring-context 文件(例如,com.example.myApp.whatever 包含 plugin.xml,或者 applicationContext.xml(如果您愿意)。
为了在类路径中检测到插件,主机应用程序应按照先前的方案动态导入由任何 jar 提供的所有上下文文件。这是通过 spring 配置中基于通配符的导入来实现的:
假设每个插件都定义了已知接口(例如,MyInterface)的 bean。主机应用程序可以定义类型List的属性。并将bean 定义为autowire="byType",以便检索列表中MyInterfaceType 的所有bean。
I have achieved a plugin-like system with Spring by following this approach:
Each plug-in must contain a spring-context file with a specific name and package prefix (for example, com.example.myApp.whatever containing plugin.xml, or applicationContext.xml if you prefer).
For the plug-in to be detected in the classpath, the host application should dynamically import all the context files contributed by any jar following the previos scheme. This is achieved with a wildcard-based import in spring config:
Provided that each plug-in defines beans of a known interface (e.g., MyInterface). The host application can define a property of type List <MyInterface> and define the bean as autowire="byType" in order to retrieve all the beans of the MyInterfaceType in a list.