SpringBoot中,为什么不直接使用Service写功能,还要有ServiceImpl

自己作为一个菜鸟,学习嘛!就要多问为什么??
都是service层,为什么会有两个情况

  • service层=service类
  • service层=service接口+serviceImpl实现类

1.注入service

为什么注入service,而不是serviceImpl?

我们使用 @Autowired注解进行自动装配,在装配或者注入的时候都是先实例化后,再往下进行。 所以这里虽然注入的是service接口,但实际上注入的是该接口的实现类。

2.为什么service两层

当项目比较简单的时候,需求明确,变更不频繁或者几乎不怎么修改的时候,用第一种就好了

  • service层=service类

当项目比较复杂,需求变更多的时候,用第二种比较好

  • service层=service接口+serviceImpl实现类

这种方式好处:

  • 核心就是解耦合
  • 便于扩展,可以多条路去实现

3.一个接口多个实现类

service层

public interface HumanService {
    String getName();
}
@Service("teacherService")
public class TeacherServiceImpl implements HumanService {
    @Override
    public String getName() {
        return "this is a teacher";
    }
}
@Service("studentService")
public class StudentServiceImpl implements HumanService {
    @Override
    public String getName() {
        return "this is a student";
    }
}

controller层

@RestController
public class HumanController {

    @Autowired
    @Qualifier("teacherService")
    private HumanService teacherService;

    @Autowired
    @Qualifier("studentService")
    private HumanService studentService;
 
    @RequestMapping("/name")
    public void getName(){
        System.out.println(teacherService.getName());
        System.out.println(studentService.getName());
    }
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐