Spring Boot自动配置 - 覆盖自动配置的bean

时间:2018-05-06 09:37:15

标签: java spring spring-boot

我试图从库自动配置中覆盖bean定义,但它不起作用。我重写了定义以返回接口类型的bean - 我自己的实现,而库自动配置bean返回一个具体的实现。

Spring在启动时找到我的bean,然后用库bean覆盖它。我尝试使用@AutoConfigureAfter(LibraryConfig.class)并制作我的bean @Lazy,但似乎没有任何效果。

我花了很多年的时间来避免神奇的'代码和这类事情就是一个很好的例子。

1 个答案:

答案 0 :(得分:0)

你的问题确实不明确,可能一个例子可以帮到这里。 无论如何,当定义基础结构级bean时,spring引导中最简单的覆盖它的方法就是提供自己的配置,它将返回相同的接口(具有给定名称的bean)

例如,让我们说,在某些spring boot source / thirdparty中有以下代码:

interface SomeInterface  {...}
public class ThirdpartyInternalImplementation implementsSomeInterface {...}

@Configuration 
public class ThirdPartyConfiguration {
   @Bean
   public SomeInterface someInterface () {
      return new ThirdpartyInternalImplementation();
   }
}

现在,让我们假设,在您的源代码中,您提供了SomeInterface的另一个实现,并且您希望将其返回。所以你应该做这样的事情:

class MyCustomImplementation implements SomeInterface {}
..........................
@Configuration
public class MyOwnConfiguration {

    @Bean 
    public SomeInterface someInterface() {
        return MyCustomImplementation();
    }
}

这应该足以注册SomeInterface的自定义实现。