依赖包如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.19</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
策略要处理的接口AppService
public interface AppService {
public String doService();
}
接口实现类AndoridServiceImpl和IosServiceImpl
@Log4j2
@Service("andoridService")
public class AndoridServiceImpl implements AppService{
@Override
public String doService() {
log.info("do AndoridService");
return "Andorid";
}
}
@Log4j2
@Service("iosService")
public class IosServiceImpl implements AppService{
@Override
public String doService() {
log.info("do IosService");
return "Ios";
}
}
策略选择类StrategyDispatch,注意这里用到注解 @Qualifier,建议配套着Service("value")一起使用
@Service
public class StrategyDispatch {
@Qualifier("iosService")
@Resource
private AppService iosService;
@Qualifier("andoridService")
@Resource
private AppService andoridService;
public AppService getAppServiceByType(String type){
if(StringUtils.equals(type,"ios")){
return iosService;
}else if(StringUtils.equals(type,"andorid")){
return andoridService;
}
return null;
}
}
调用类StrategyController
@RestController
@RequestMapping("/strategy")
public class StrategyController {
@Resource
private StrategyDispatch strategyDispatch;
@GetMapping("getServiceByType/{type}")
public String getUserInfoByUser(@PathVariable("type") String type){
return strategyDispatch.getAppServiceByType(type).doService();
}
}
Postman调用:
控制台打印: