Spring自定义自动配置类不能与默认自动配置类同名

时间:2017-10-05 01:54:04

标签: spring-boot spring-boot-test

我正在尝试编写自定义自动配置类来覆盖默认自动配置类的行为。

例如,假设我试图覆盖org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration的行为。 如果我将自定义自动配置类命名为默认值 - 例如 - com.rabbit.RabbitAutoConfiguration,则它们都具有相同的bean名称。 我在我的自定义autoconfigure类中使用@AutoConfigureAfter,应用程序正常工作。但是,当我尝试编写测试类来测试自定义自动配置类com.rabbit.RabbitAutoConfiguration时,会出现问题。

由于两者都具有相同的bean名称,因此在编写测试用例时,我注册这些类的顺序非常重要。

例如在测试类中,

annotationConfigWebApplicationContext.register(org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration.class, com.rabbit.RabbitAutoConfiguration.class);

相比,

具有不同的行为

annotationConfigWebApplicationContext.register(com.rabbit.RabbitAutoConfiguration.class, org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration.class);

但是,我设法通过指定@Configuration("customRabbitAutoConfiguration")将bean名称显式指定给我的自定义autoconfigure类来克服这个问题。

班级名称不应该相同吗?如果是这样,为什么我只在编写测试类时才看到这个问题,而不是在使用真实应用程序时。

只是想知道是否有更好的方法。

0 个答案:

没有答案