当前位置: 首页 > 面试题库 >

Spring io @Autowired:空白的final字段可能尚未初始化

邢炯
2023-03-14
问题内容

我认为这是一个非常基本的问题-

关于此错误,有几种类型的问题,但在前5个结果中没有一个具有Spring的细微差别。

我有一个在spring编写的REST-ful webapp的开始。我正在尝试将其连接到数据库

我有一个名为Workspace的实体,正在尝试使用bean的弹簧注入(正确的术语?)来保存工作区实体的实例

package com.parrit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.parrit.models.Workspace;
import com.parrit.models.WorkspaceRepository;

@RestController
@RequestMapping("/workspace")
public class WorkspaceController {

    @Autowired
    private final WorkspaceRepository repository;

    @RequestMapping(method = RequestMethod.POST)
    void save( @RequestBody String workspaceHTML) {
        Workspace ws = new Workspace();
        ws.setHTML(workspaceHTML);
        repository.save(ws);
    }
}

我的错误是在存储库变量上private final WorkspaceRepository repository。编译器抱怨它可能没有初始化,并且尝试运行该应用程序会产生相同的结果。

如何在我的控制器中获取此存储库对象的实例,以便对其执行保存操作?


问题答案:

@Autowired球场上拥有和决赛是矛盾的。

后者表示:此变量只有一个值,并且在构造时初始化。

前者说:Spring将构造对象,将此字段保留为空(其默认值)。然后,Spring将使用反射类型为WorkspaceRepository的bean初始化此字段。

如果要自动绑定最终字段,请使用构造函数注入,就像您自己进行注入一样:

@Autowired
public WorkspaceController(WorkspaceRepository repository) {
    this.repository = repository;
}


 类似资料:
  • 问题内容: 我正在用Java编程。我已经在每种方法中添加了注释,以解释它们应该做什么(根据分配)。我将我所知道的添加到了存根(这是我在研究学校提供的javadoc之后创建的)。我的问题不是几个函数,我知道testWord和setWord中有错误,但是我自己解决。我的问题是关于这条线的: 这行是由学校提供的,因此我必须假设它是正确的,我在任何地方都找不到关于常量字段值INITIAL的任何文档,因此,

  • 问题内容: 我最近遇到了错误消息“空白的最终字段obj可能尚未初始化”。 如果您尝试引用可能尚未分配值的字段,通常就是这种情况。示例类: 我使用Eclipse。在该行中,我得到了错误,在该行中,一切正常。 到目前为止,这是有道理的。 接下来,我尝试在构造函数内部创建的匿名接口中访问。 这也行得通,因为在创建界面的那一刻我无法访问。我也可以将实例传递到其他地方,然后初始化对象,然后运行接口。(但是,

  • 我正在尝试使用Spring-boot+Vaadin创建一个web项目,并且希望使用spring-data-jpa和hibernate从PostgreSQL数据库中获取数据。 在我的Vaadin看来,我尝试自动连接我的服务类,但我总是得到null,而且eror堆栈跟踪没有告诉我原因。 数据库得我得配置: 视图和UI: pom.xml: 我的服务: 更新的解决方案:

  • 问题内容: 我有一个方法创建一个,另一个方法更改字符串 我的编译器说它“可能尚未初始化”。 有人可以解释吗? 问题答案: 变量可能尚未初始化 在内部定义方法时,必须在其中初始化程序的每个变量中必须先使用一个值的地方。 同样重要的是,您的代码将永远无法正常运行,因为Java中的字符串是不可变的,因此您无法编辑字符串,因此应更改方法。 我将您的代码更改为类似的内容,但是我认为您的编辑方法应该做另一件事

  • 所以我已经在结果中声明了相关字符串的值,但是它仍然说我的变量“result”可能还没有初始化。 我正在尝试实现与此类似的输出。任何人都可以帮我吗?谢谢!

  • 我正在研究Euler Problem 9项目,其中说明: 毕达哥拉斯三元组是由三个自然数组成的集合 例如,3^2 4^2=9 16=25=52。 确实存在一个毕达哥拉斯三重态,其bc=1000。查找产品abc。 以下是我到目前为止所做的: 当我运行代码时,会出现以下错误: 注意:我的每个变量(a、b和c)都有不同的行号。 我想当我声明a、b和c为整数时,如果不赋值,默认值是0。 即使不是这样,在我

  • 问题内容: 我得到错误: TestCounter.java:115:变量计数器可能尚未初始化counters [i] = new Counter(i); 而且我不知道如何解决它。我知道我的课程“” 有效。下面是我的代码,如果您可以看一下,我将非常高兴。此代码包装在类的main方法中。 问题答案: 您尚未创建数组,只是声明了变量。 您需要这样做: 或类似的东西

  • 在最后一行显示为时出错 :::: 变量结果可能尚未初始化 这是我的代码: