当前位置: 首页 > 知识库问答 >
问题:

对服务层中的存储库使用“Autowired”注释和“Private Final”有什么区别?

方博
2023-03-14
@Service
@AllArgsConstructor
@Transactional
public class StudentService {
    private final StudentRepository studentRepo;
    // complete service code using studentRepo
}

以及方法2:

@Service
public class StudentService {
    @Autowire
    private StudentRepository studentRepo;
    // complete service code using studentRepo
}

我读到它与构造函数和字段注入有关,但我真的不明白这个语法是如何解决两者之间的区别的。有什么可以让我更好理解的解释或资源吗?提前谢谢!

共有1个答案

符允晨
2023-03-14

您正在堆叠大量的框架,这会增加混乱。这种混乱可能是因为你使用的是龙目岛。@allargsconstructor自动添加一个构造函数,其中包含构造服务实例所需的所有参数。

@allargsconstructor为类中的每个字段生成一个具有1个参数的构造函数。用@nonnull标记的字段将导致对这些参数进行空检查。-资料来源:龙目岛文件

使用@allargsconstructor有效地生成以下类

@Service
@Transactional
public class StudentService {

    private final StudentRepository studentRepo;

    public StudentService(StudentRepository studentRepo) {
        this.studentRepo=studentRepo;
    }
    // complete service code using studentRepo
}

现在,由于这个类只有一个构造函数,Spring将使用它来执行依赖注入。这称为基于构造函数的依赖注入。

@Service
@Transactional
public class StudentService {
    @Autowire
    private StudentRepository studentRepo;
    // complete service code using studentRepo
}

而这称为基于字段的依赖注入。

因此,您应该更喜欢基于构造函数的依赖项注入,原因很简单,它非常容易使用,而且在您的面前。您可以很容易地测试它,而使用字段注入编写单元测试是困难的(er),因为您需要反射来注入字段。

 类似资料:
  • 我看过一些教程,它们使用不同的语法来完成相同的任务。一旦通过控制器收到创建学生对象的POST请求,服务层就会使用这两种方法注入存储库。 方法1: 以及方法2: 我读到它与构造函数和字段注入有关,但我真的不明白这种语法是如何解决这种差异的。有什么解释或资源让我更好地理解吗?提前谢谢你!

  • 问题内容: @Inject和@Resource以及@Autowired注释有什么区别? 我们什么时候应该使用它们? 问题答案: 和注释@Inject和有什么区别?@Resource@Autowired 我们什么时候应该使用它们?@Inject与@Autowire与@Resource之间的区别? @Autowired:spring专有注释(与@Inject和@Resource相反),按类型(即,通过

  • 我是一个全新的Docker和正在学习入门教程。在第7步,它说 键入命令并按Return。该命令列出本地系统上的所有映像。您应该在列表中看到。 但第一列清楚地表示“存储库”,而不是例如“图像名称”。我还在别人的机器上注意到,因为一个图像可以有多个标记,所以这个列表经常包含重复的条目--每个标记一个。那么这是一个图像列表,一个存储库列表,一个图像-标签组合列表还是其他什么呢?映像和存储库有什么区别?

  • 问题内容: 在我的具有单个Controller类的Spring MVC应用程序中, 我的输入采用JSON形式,我使用Jackson将其转换为Java对象。现在,基于Java对象中的属性,我想发送到适当的服务类。如果是, 所有这些Service类都将实现一个基本接口。我不想在我的Java代码中执行此实例化。如何将其移至配置文件。如何根据请求值动态注入这些对象。请注意,正在使用注释。我是Spring的

  • 我有一个带有的spring boot应用程序。 我还使用并在其中扩展。 当我尝试@AutoWired我拥有的服务时: 原因:org.springframework.beans.factory.noSuchBeanDefinitionException:没有“com.api.core.service.countryService”类型的合格bean可用:应至少有一个合格的自动候选bean。依赖项注释

  • 有人能解释一下Android支持存储库与Android支持库与Google存储库与Google Play服务之间的区别吗? 我的理解是,Google Repository与Google Play Services是相同的,只是它分离了所有的api(而经典的play服务是一个包含所有内容的大罐子),并且更适合在android Studio中使用,因为现在您可以选择正是你想要编译的api(例如'com