我有基于 Spring Web 的应用程序。现在我想将它的部分也用于另一个项目。因此我有两个问题:
- 打包可重用库等功能的推荐方法是什么?包含应用程序上下文 XML 的 JAR 文件还是 JAR + 额外的 XML?还有什么?
- 如何将这样的库合并到另一个基于 Spring(web-)的项目(不同的命名空间 - 包)中,以便例如
@Autowired
可以工作?我猜类路径上的简单 JAR 是不够的 - 如何引用 lib 的应用程序上下文等?还需要哪些步骤?
我使用的方法只是确保应用程序上下文片段驻留在库 jar 文件中的一个众所周知的位置(我个人使用META-INF/spring
)。所以我可能在一个名为的文件中有一些常见的安全配置和 beanMETA-INF/spring/common-security-context.xml
在您的客户端应用程序(使用该库的应用程序)中,您可以通过在应用程序上下文中进行如下导入来包含所有共享库中的服务和 bean:
<import resource="classpath*:META-INF/spring/*-context.xml" />
(注意类路径后的星号)。这将从正在运行的应用程序可见的任何 jar 文件或类路径根目录中找到名称与META-INF/spring/*-context.xml
模式匹配的文件,并将它们聚合到一个逻辑上下文中。根据需要调整通配符。
显然,如果您开始广泛使用它,您将需要一些策略来避免可能发生的 bean/服务名称冲突。
您应该使用某种包装来说明它所依赖的内容。一个流行的选择是使用Maven打包,提供解释依赖关系的 pom.xml 文件。完成后,您将执行应用程序的 Maven 发布。
在使用它时,您需要在您的应用程序弹簧配置中引用您的共享配置模板。您可以直接导入它:
<import resource="classpath*:/META-INF/path/to/otherAppContext.xml" />
这是假设您实际上想要共享您的 spring 上下文配置。如果您(仅)提供可重用的类,通常不需要共享上下文配置。