我有一个多模块(maven)弹簧构建.所有模块都发布了一些bean,并且大多数模块都使用依赖关系图中进一步定义的bean.虽然它的大多数是注释声明bean,但几乎每个模块都有一个或两个xml声明的bean.
虽然我们有一个不太合适的解决方案,但我真的想知道在这种情况下组织xml文件的正确/最佳方式是什么?你在模块之间使用导入还是有其他方法?您是否将所有xml文件放在一个位置或根据依赖关系图将它们分散?您的解决方案如何处理部分弹簧上下文(典型的集成测试)?
我还希望以一种方式组织这种方式,以便我最佳地利用IDE的弹簧支持(IDEA和一些eclipse用户).
Oli*_*ohm 22
我们在模块中使用通配符导入以允许其他模块向模块声明bean以声明导入:
<import resource="classpath*:com/acme/**/*-core-support.xml" />
Run Code Online (Sandbox Code Playgroud)
想要贡献给"主机"的模块只需要src/main/resources/com/acme在这种情况下放置一个正确命名的文件,以便自动获取.如果你使用类路径扫描(通过<context:component-scan />它会变得更容易).
在这方面有帮助的另一件事是一些小的Spring扩展,它获取给定类型的bean并再次重新发布它们ApplicationContext.做这样的事情:
<plugin:list id="beanList" class="com.acme.MyCoolPluginInterface" />
<bean class="com.acme.MyPluginHost">
<property name="plugins" ref="beanList" />
</bean>
Run Code Online (Sandbox Code Playgroud)
结合通配符导入,这将:
ApplicationContext工具中找到的所有bean ,MyCoolPluginInterface并将它们包装在注册的列表beanList中ApplicationContext.MyPluginHost引用该列表.实际上,您现在可以通过向类路径添加插件模块(也就是Maven中的依赖项)来扩展您的应用程序.
这个微小的Spring扩展名为Spring Plugin,并在Apache 2许可下发布.有关详细信息,请参阅http://github.com/SpringSource/spring-plugin.在Github 上还有一个更高级的示例项目,它展示了它如何工作并改善了GitHub的模块化.该应用程序是我的"哎呀!我的架构在哪里?"的示例代码.您可以在此处查看幻灯片或在此处观看录制的演示文稿.
通常我们将应用程序配置为在目标环境中运行(使用JNDI查找和内容).当然,您希望使用标准PropertyPlaceholderConfigurer机制来外部化管理员必须触及的配置,或者通过各种环境进行更改.
为了能够集成测试,我们通常有额外的配置文件src/main/test是得到加载额外的正常配置文件覆盖的是领带的配置环境的关键豆.例如,如果您的普通配置文件中有数据源
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource" />
Run Code Online (Sandbox Code Playgroud)
你可以test-context.xml通过使用覆盖它
<bean id="dataSource" class="...DataSource" />
<!-- config -->
</bean>
Run Code Online (Sandbox Code Playgroud)
并在测试类中导入原始的之后
@ConfigurationContext(locations = {"app-context.xml", "test-context.xml"})
public FooBarIntegrationtest {
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12161 次 |
| 最近记录: |