我正在尝试创建一个将自动装配的组件,除非用户创建不同的实现.
我使用以下代码尝试并隔离问题:
界面:
public interface A {...}
实施:
@Component
@ConditionalOnMissingBean(A.class)
public class AImpl implements A {...}
使用代码:
public class AUsage {
@Autowired
private A a;
}
在这个例子中,我没有让AImpl自动装入AUsage.
如果我在没有ConditionalOnMissingBean的另一个类中实现A,它就可以工作.
最佳答案 我尝试从互联网上复制@ConditionalOnMissingBean的现有用法,并注意到它们都引用了@Bean方法.
确实,当我将此代码添加到AUsage时:
public class AUsage {
@Autowired
private A a;
@Bean
@ConditionalOnMissingBean
public A createA() {
return new AImpl();
}
}
并从AImpl中删除了注释:
public class AImpl implements A {...}
一切都按预期工作.
如果有人知道的话,我很乐意得到解释.