从外部覆盖Spring项目的配置

时间:2011-10-18 12:43:17

标签: java spring configuration

我正在开发一个Spring应用程序,它应该被任何其他应用程序使用,无论它是Spring项目,Web应用程序还是简单的单类控制台应用程序。使用我的项目的应用程序只需要在我的应用程序中添加JAR文件。

所以我的项目有一个静态工厂类,它从Spring上下文中获取并返回一个bean,它充当访问对象以访问我项目的所有公共可用函数。 那部分已经有效了。

但我需要使用我的JAR的应用程序的开发人员能够覆盖我的项目中的某些配置,而无需编辑JAR本身中的配置文件。目前这些设置应该是可覆盖的: - 数据源和hibernate bean配置 - jasypt(加密)bean配置 - log4j设置

如何使用jar外部的配置使这些设置可以覆盖?

问候 触

3 个答案:

答案 0 :(得分:1)

也许一个好的解决方案是用户可以覆盖的配置,为此请看一下: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-java

特别是@Configuration和@Bean

也许你可以实现一个配置类,用户可以覆盖它。在扩展了类并覆盖了一些提供某些bean的方法之后,用户应该告知你的工厂除了

之外什么都不做。

new AnnotationConfigApplicationContext(userConfigurationClass);

答案 1 :(得分:0)

如果你想要替换完整的配置,那么最简单的方法就是让一个参数化的工厂以另一个配置文件为参数。

如果您需要更精细的颗粒(比如说最多10个部分),那么您可以将应用程序xml分成几个较小的一次,然后再使用一个允许交换较小的xml文件的可配置工厂。

答案 2 :(得分:0)

所以我得到了一个适合我的解决方案。 我在主应用程序上下文的底部对覆盖上下文XML进行了一般导入:

<import resource="classpath*:project/package/config/override/or-*.xml" />

因此,用户所要做的就是在他的类路径(例如资源文件夹)中创建包“project / package / config / override”,并在其中放置匹配的XML文件和新的bean定义。