java扩展基于spring的应用程序
我有一个基于spring的Web服务。我现在想为它构建一种插件,用bean扩展它。我现在在网络上所拥有的。xml是:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/*-configuration.xml</param-value>
</context-param>
我的核心应用程序有main-configuration.xml
声明其bean。我的插件应用程序有plugin-configuration.xml
,它声明了额外的bean。现在,当我部署时,我的构建将plugin.jar
部署到/WEB-INF/lib/
中,并将plugin-configuration.xml
复制到/WEB-INF/classes/
中,所有这些都在main.war
下
这一切都很好(虽然我认为可能有更好的解决方案),但当我开发插件时,我不想在Eclipse中有两个具有依赖性的项目。我希望把main.jar
作为一个图书馆。但是,不会自动发现来自main.jar
的web.xml
。我该怎么做?豆子注射剂?什么豆子发现?还有别的吗
注:我希望在生产中有多个不同的插件,但每个插件的开发都将与纯main相冲突。罐子
谢谢
# 1 楼答案
我认为有一种更简单的方法:
在主机应用程序(webapp)中,定义如下
contextConfigLocation
参数:关键部分是
classpath*:
,因为它会扫描整个类路径,以查找与以下模式匹配的配置文件。如果只使用classpath:
,查找将在找到的第一个文件时停止。如果没有正确的星号,它也不会穿过罐子第二个关键部分是至少有一个非通配符的基本路径,以便查找工作。这是因为
Classloader
特征只有在包含基本路径时才可靠地返回所有资源(有关详细信息,请参阅PathMatchingResourcePatternResolver
上的Javadoc)你现在需要做的是把你的
plugin-configuration.xml
放在/META-INF/foo/
里,把它打包成JAR,放在你的类路径中(如果你用Maven构建,只需添加依赖项)在应用程序启动时,Spring现在还将从插件中获取所有配置文件,并从em中构建ÀapplicationContext`
你可能还想看看我用Spring写的另一篇关于应用程序模块化的帖子:How do you make a multi-module spring configuration?