Spring Boot 服务 class 是否应该包含受保护的方法?

Does SpringBoot service class should includes protected methods?

我是这样想的 我有服务 classses。并且此服务 classes 在同一个包中,不同的服务可能需要其他服务方法。所以我不得不使用受保护的方法。

之后我这样组织我的服务class:

  @Service
  public class LessonService {

private final LessonRepository lessonRepository;

public LessonService(LessonRepository lessonRepository) {
    this.lessonRepository = lessonRepository;
}

protected Lesson saveLesson(Lesson lesson) {
    return lessonRepository.save(lesson);
}

protected List<Lesson> showAllLessons(){
    return lessonRepository.findAll();
}
}

然后我创建了一个属于控制器包的控制器class。

 @RestController
public class LessonController { 
private final LessonService lessonService;

public LessonController(LessonService lessonService) {
    this.lessonService = lessonService;
}


@PostMapping("/saveLesson")
public Lesson saveLesson(@RequestBody Lesson lesson) {

    return lessonService.
}

我的 LessonController 中有一个 LessonService class 实例,所以我想我可以访问 LessonService 方法,就像 saveLesson();在 lessonService 实例上。但我做不到。

所以我想我不应该保护这些方法。我错了吗?

是的,如果你想让你的服务 classes 和控制器 classes 分开在不同的包中,你需要在你想要公开的方法上使用 public 修饰符控制器的包。

您公开了服务 class 的构造函数这一事实仅意味着您允许来自其他包的 classes 创建服务 class 的实例。它并不自动意味着控制器 class 可以访问实例化对象上的每个方法。