前言
@Fallback是Springboot3.4.x版本之后提供的注解,用于条件注解@ConditionalOnSingleCandidate使用,如果有单个 Primary Bean,条件就会匹配;如果没有 Primary Bean,如果有单个非 Fallback Bean,条件也会匹配
@Fallback使用
新建一个Springboot3.4.0版本以上的项目,定义一个接口
public interface MyService {
void doSomething();
}
然后实现两个bean
@Slf4j
@Service
public class MyServiceImpl1 implements MyService {
@Override
public void doSomething() {
log.info("==============MyServiceImpl1=========");
}
}
@Slf4j
@Service
public class MyServiceImpl2 implements MyService {
@Override
public void doSomething() {
log.info("==============MyServiceImpl2=========");
}
}
然后定义一个service类
public class AnotherBean{
private MyService myService;
public AnotherBean(MyService myService) {
this.myService = myService;
}
public void doSomething() {
myService.doSomething();
}
}
最后使用注解@ConditionalOnSingleCandidate注入bean
@Configuration
public class AnotherConfiguration {
@Bean
@ConditionalOnSingleCandidate(MyService.class)
public AnotherBean anotherBean(MyService myService) {
return new AnotherBean(myService);
}
}
然后写一个测试接口
@RestController
public class IndexController {
@Autowired
private AnotherBean anotherBean;
@GetMapping("/index")
public String index() {
anotherBean.doSomething();
return "success";
}
}
如果没有使用@Fallback,启动会报错
在
MyServiceImpl1使用@Fallback,
@Slf4j
@Service
@Fallback
public class MyServiceImpl1 implements MyService {
@Override
public void doSomething() {
log.info("==============MyServiceImpl1=========");
}
}
启动的时候,调用接口
http://ip:端口/index
会输出
总结
Springboot3.4.x版本提供了这个新注解,可以根据自己需求使用