我试图从库自动配置中覆盖bean定义,但它不起作用。我重写了定义以返回接口类型的bean - 我自己的实现,而库自动配置bean返回一个具体的实现。
Spring在启动时找到我的bean,然后用库bean覆盖它。我尝试使用@AutoConfigureAfter(LibraryConfig.class)
并制作我的bean @Lazy
,但似乎没有任何效果。
我花了很多年的时间来避免神奇的'代码和这类事情就是一个很好的例子。
答案 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
的自定义实现。