Pin*_*ler 21 java spring spring-mvc spring-data
我认为这是一个非常基本的问题 -
关于这个错误有几种问题,但前5个结果中没有一个会增加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);
}
}
Run Code Online (Sandbox Code Playgroud)
我的错误在于存储库变量private final WorkspaceRepository repository.编译器抱怨它可能没有被初始化并且尝试运行应用程序会产生相同的结果.
如何将此存储库对象的实例添加到控制器中以对其执行保存操作?
JB *_*zet 45
在@Autowired场上进行决赛是矛盾的.
后者说:这个变量有一个且只有一个值,它在构造时初始化.
前者说:Spring将构造对象,将此字段保留为null(其默认值).然后Spring将使用反射来使用WorkspaceRepository类型的bean初始化该字段.
如果您想要自动连接最终字段,请使用构造函数注入,就像您自己进行注入一样:
@Autowired
public WorkspaceController(WorkspaceRepository repository) {
this.repository = repository;
}
Run Code Online (Sandbox Code Playgroud)
确切地说,您必须提供一个指定最终字段的构造函数
private final WorkspaceRepository repository;
@Autowired
public WorkspaceController(WorkspaceRepository repository){
this.repository = repository;
}
Run Code Online (Sandbox Code Playgroud)
Spring将能够弄清楚如何初始化对象并通过构造函数注入存储库
| 归档时间: |
|
| 查看次数: |
15968 次 |
| 最近记录: |