future.png
珠玑随笔

联系:

future.png

版权 © 2022 by Hsu

技术: Gatsby

样式: Bulma

许可: CC BY NC SA 4.0

Spring Boot Service 与 ServiceImpl 的关系

2022年01月08日

Hsu

1分钟

背景

Spring Boot 为了提高业务逻辑的可扩展性, 特意把 Service 层分为了 Service 接口层 与 ServiceImpl 实现层.

原因是在某些场景中, 业务接口不变, 业务逻辑可能会根据不同的用户环境发生改变.

用法

接口层

首先需要定义一个 Service 接口.

public interface TextService {
  String doSomeLogic();
}

实现 A

在 @Service 中提供唯一标志 A.

@Service("A")
public class TextServiceAImpl implements TextService {

  @Override
  public String doSomeLogic() {
    return "Text From A";
  }
}

实现 B

在 @Service 中提供唯一标志 B, 提供第二个实现.

@Service("B")
public class TextServiceBImpl implements TextService {

  @Override
  public String doSomeLogic() {
    return "Text From B";
  }
}

调用

通过 @Qualifier 引入实现的版本.

@RestController
public class DemoController {

  @Autowired
  @Qualifier("A")
  TextService textService;

  @GetMapping("/text")
  String getText() {
    return textService.doSomeLogic(); // "Text From A"
  }
}