我们在模块中使用通配符导入,以允许其他模块向声明导入的模块贡献 Bean:
<import resource="classpath*:com/acme/**/*-core-support.xml" />
模块性
想要为“主机”做出贡献的模块只需要在这种情况下放置一个正确命名的文件即可自动拾取。如果您使用类路径扫描(通过它将变得更加容易)。src/main/resources/com/acme
<context:component-scan />
在这方面有帮助的另一件事是一些小的Spring扩展,它拾取给定类型的豆子并再次重新发布它们。通过执行如下操作:ApplicationContext
<plugin:list id="beanList" class="com.acme.MyCoolPluginInterface" />
<bean class="com.acme.MyPluginHost">
<property name="plugins" ref="beanList" />
</bean>
结合通配符导入,这将:
- 收集在 该实现中找到的所有 Bean,并将它们包装在 一个列表中,该列表注册为 .
ApplicationContext
MyCoolPluginInterface
beanList
ApplicationContext
- 允许 引用该列表。
MyPluginHost
事实上,您现在可以通过将插件模块添加到类路径(在 Maven 中称为依赖项)来简单地扩展您的应用程序。
这个微小的Spring扩展名为Spring Plugin,并在Apache 2许可证下发布。有关详细信息,请参阅 http://github.com/SpringSource/spring-plugin。Github上还有一个更高级的示例项目,它显示了它是如何工作的,并改进了GitHub的模块化。该应用程序是我的“哎呀!我的建筑去了哪里?“演示,你可以在这里看到幻灯片或在这里观看录音。
不同的环境
通常,我们将应用程序配置为在目标环境中运行(使用JNDI查找等)。当然,您希望使用标准机制来外部化管理员必须接触的配置,或者将通过各种环境进行更改。PropertyPlaceholderConfigurer
对于集成测试,我们通常有额外的配置文件,这些文件被附加到正常的配置文件中,覆盖将配置绑定到环境的关键bean。例如,如果您在普通配置文件中有一个数据源src/main/test
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource" />
您将通过使用test-context.xml
<bean id="dataSource" class="...DataSource" />
<!-- config -->
</bean>
并在测试类中的原始版本之后导入
@ConfigurationContext(locations = {"app-context.xml", "test-context.xml"})
public FooBarIntegrationtest {
// ...
}