我在 Spring (4.1.7) 中编写了一些配置类,以使编写一些标准的东西(例如测试用例)更容易。为此,我曾经@Condition
检查,例如,是否已经DataSource
定义了一个,如果没有,则在内存中创建一个新的。当然,这基本上是 Spring Boot 已经提供的——但由于我们在该应用程序中还没有 Spring Boot,所以这对我们来说不是一个选择。
整个事情运作得很好,例如,如果你写......
@RunWith(SpringJunit4Runner.class)
@ContextConfiguration( classes = {SomeTest.Config.class, DefaultConfig.class} )
public class SomeTest {
static class Config {
...
在这种情况下,首先读取静态Config
类,创建那里的 bean,然后DefaultConfig
查看并实例化,例如 a DataSource
,如果Config
没有。
我对这个解决方案的问题是,它包含一个隐含的知识:您需要知道您必须首先在@ContextConfiguration
注释中编写更具体的配置类。如果你把DefaultConfig
它放在第一位,它会先检查一个,例如,因为DataSource
还没有创建 no,它会创建一个,这可能会导致不幸的副作用(DataSource
例如,因为那里也创建了一些依赖于 a 的东西)。
我真的很想通过强制DefaultConfig
始终将其作为最后一个配置加载(而不必明确地将其放在@ContextConfiguration
注释中的最后)来使其更加稳定。因此,如果开发人员将整个排序弄乱了,则不会发生任何不好的事情,并且一切仍然按计划进行,因为DefaultConfig
最后加载,然后才检查其他人是否已经定义了 a DataSource
,例如。
有什么办法可以做到这一点?我需要的只是 Spring Boot 行为,其中 Auto-Configure 类是最后自动处理的。显然在那里不起作用,因为它不适用于配置类排序......是否有一些类可以覆盖以影响那里的行为?@Order