【问题标题】:How can I package an extensible default Spring configuration in my framework?如何在我的框架中打包可扩展的默认 Spring 配置?
【发布时间】:2011-01-02 22:08:42
【问题描述】:

这是我第二次偶然发现这个问题,但我还没有找到好的解决方案。我的问题是我想用默认的 Spring 上下文打包一个像 JAR 这样的框架,并让我的 JAR 包的用户可以使用这个配置(甚至是 ApplicationContext 实现)来添加他自己的 bean 定义(来自另一个配置文件)并使用或覆盖默认上下文中的定义。有人知道这样做的好方法吗?

【问题讨论】:

  • 您是否愿意考虑添加一些东西来管理您的模块?使用 spring-dm 为解决这个问题开辟了一些(方便的)可能性,但它可能对您的需求来说有点过头了..
  • 嗯,我选择了 Spring 核心模块,特别是因为我不需要庞大的应用程序服务器来启动和运行有用的环境。恕我直言,添加 OSGI 的东西只会增加我真正想要避免的不必要的复杂性(最初 Spring 想法的主要目标之一是让事情比 J2EE 更容易,但有时我很遗憾地觉得他们好像刚刚到达那里)。
  • @Mark:你能解释一下 Spring DM 的解决方案是什么样的吗?我静静地面临着同样的问题,但是我的 Spring 配置是使用 Manifest-Header Spring-Context 加载的,AFAIK 不支持通配符从例如加载多个配置文件。 Bundle-Fragments..

标签: spring configuration frameworks jar


【解决方案1】:

使用您的 jar 的人必须在他们的中导入您的 .xml 文件,如下所示:

 <import resource="classpath*:/META-INF/spring-yourframework-init.xml" />

/META-INF/spring-yourframework-init.xml是你的xml在你jar中的路径,这个xml文件是一个普通的spring配置文件)

【讨论】:

  • 这是有道理的,但是如果有人重新定义了一个已经存在的定义,它不会抛出异常吗(我宁愿它覆盖现有的定义)?
  • 嗯,是的,但这就是 spring 灵活性的好处。 (顺便说一句,尽量不要定义“id”,而是定义“name”)
  • 再次感谢,通过定义名称并从类路径导入资源,bean 定义的覆盖工作没有问题。所以这正是我想要的:)
猜你喜欢
  • 2017-09-15
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 2018-10-29
相关资源
最近更新 更多