- IHandler
1
2
3public interface IHandler {
String handle(String param);
}- AHandlerImpl
1
2
3
4
5
6
7
8
9
public class AHandlerImpl implements IHandler {
public String handle(String param) {
log.info("exec A");
return "A";
}
} - BHandlerImpl
1
2
3
4
5
6
7
8
9
public class BHandlerImpl implements IHandler {
public String handle(String param) {
log.info("exec B");
return "B";
}
}
- AHandlerImpl
controller使用到IHandler
1 |
|
Bean重复问题
此时会报错,因为Spring不知道controller需要的IHandler是AHandlerImpl与BHandlerImpl中哪一个
这时候只需要在AHandlerImpl与BHandlerImpl上随便选择一个加上@Primary注解即可解决报错问题在某种条件下实现Bean注入
- 有了
BHandlerImpl就注入BHandlerImpl,否则就注入默认的AHandlerImpl
在AHandlerImpl上添加@ConditionalOnMissingBean注解,例如:1
2
3
4
// 只要存在实现IHandler接口的Bean,AHandlerImpl就不会注入进去
public class AHandlerImpl implements IHandler {
}
Conditional的解析发生在