3 回答
TA贡献1784条经验 获得超2个赞
一种选择是注入两个 bean 并有条件地选择所需的 bean。您可以将实现相同接口的类自动装配到Map.
以下示例使用工厂类来隐藏条件检查。
@Component("type1")
public class Type1 implements SomeInterface{}
@Component("type2")
public class Type2 implements SomeInterface{}
@Component
public class MyTypeFactory {
@Autowired
private Map<String, SomeInterface> typesMap;
public SomeInterface getInstance(String condition){
return typesMap.get(condition);
}
}
@Component
public class MyService {
@Autowired
private MyTypeFactory factory;
public void method(String input){
factory.getInstance(input).callRequiredMethod();
}
}
TA贡献1744条经验 获得超4个赞
您可以@Autowire在控制器中同时使用两个 bean,并根据请求决定返回哪个 bean。
考虑以下接口:
public interface MyInterface { ... }
示例配置:
@Configuration
public class MyConfig {
@Bean("first")
public MyInterface firstBean() { ... }
@Bean("second")
public MyInterface secondBean() { ... }
}
示例控制器:
@RestController
public class MyController {
@Autowire
@Qualifier("first")
public MyInterface first;
@Autowire
@Qualifier("second")
public MyInterface second;
@GetMapping
public MyInterface doStuff(@RequestBody body) {
if(shouldReturnFirst(body)){
return first;
} else {
return second;
}
}
}
请注意,您很可能不应该这样做,但有一个服务,比如MyService应该为您实现这个逻辑。
@Component
public class MyService {
public MyInterface doStuff(body) {
if(shouldReturnFirst(body)){
// build your response here
} else {
// build your response here
}
}
}
只需从控制器委托给服务
@GetMapping
public MyInterface doStuff(@RequestBody body) {
return myService.doStuff(body);
}
TA贡献1873条经验 获得超9个赞
Spring有一个Conditional Bean的概念...
看看这里https://www.intertech.com/Blog/spring-4-conditional-bean-configuration/
添加回答
举报