我将从解释我的情况开始。我们的应用程序分为共享项目(包含所有项目的代码)和特定应用程序。在共享项目中,我们有一个interface
及其实现
public interface Provider
{
...
}
@Bean
public class ProviderImpl implements Provider
{
...
}
字符串
在某些应用程序中,我们需要更改默认实现,因此我们定义了另一个Bean
@Bean
@Primary
public class ApplicationProviderImpl implements Provider
{
...
}
型
我想消除用@Primary
注解每个特定于应用程序的实现的需要,这样其他开发人员就可以尽可能地提供他们的bean实现。
除了@Primary
之外,是否还有其他的注解来决定使用哪个bean实现?注解器可能会有所帮助,但在我看来会使它更容易出错。
2条答案
按热度按时间mzmfm0qo1#
感谢@XtremeBaumer的评论,我得到了一个很好的解决方案:
字符串
这基本上导致了与
@Primary
相反的结果。dxpyg8gm2#
由于注解有长度限制,让我把它放在这里,Re:@Mathias“如果有两个bean具有相同的@ConditionalOnMissingBean注解.”
Spring没有提供专门的bean overriding机制,但在注入端支持丰富的bean选择方法。其中之一是ObjectProvider。假设你的Provider接口有3个bean:
字符串
现在在注入端使用ObjectProvider而不是Provider(构造函数注入,ObjectProvider作为参数):
型