有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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.jarweb.xml。我该怎么做?豆子注射剂?什么豆子发现?还有别的吗

注:我希望在生产中有多个不同的插件,但每个插件的开发都将与纯main相冲突。罐子

谢谢


共 (1) 个答案

  1. # 1 楼答案

    我认为有一种更简单的方法:

    在主机应用程序(webapp)中,定义如下contextConfigLocation参数:

    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:/META-INF/foo/*-configuration.xml</param-value>
    </context-param>
    

    关键部分是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?