Spring错误:(21,34)java:变量customUriBuilder未在默认构造函数中初始化
我有春豆Spring错误:(21,34)java:变量customUriBuilder未在默认构造函数中初始化,java,spring,dependency-injection,Java,Spring,Dependency Injection,我有春豆 @Component public class CustomUriBuilder { private final String cUrl; private final String redirectUri; private final String clientId; public CustomUriBuilder (@Value("${project.url}") String cUrl, @Va
@Component
public class CustomUriBuilder {
private final String cUrl;
private final String redirectUri;
private final String clientId;
public CustomUriBuilder (@Value("${project.url}") String cUrl,
@Value("${project.redirect.url}") String redirectUri, @Value("${project.client-id}") String clientId) {
this.cUrl= cUrl;
this.redirectUri = redirectUri;
this.clientId = clientId;
}
//No default constructor
}
我需要把这个豆子注入另一个豆子
@Component
public class LinksBuilder {
@Autowired
private final CustomUriBuilder customUriBuilder ;
//No constructors
}
但我有编译错误
错误:(21,34)java:变量customUriBuilder未在中初始化
默认构造函数
同时,我正在另一个控制器中注入LinksBuilder
(作为最终版本),没有任何问题
@RestController
@RequestMapping(produces = "application/json")
public class resourceV4 {
private final LinksBuilder linksBuilder;
//No constructors
.
}
为什么在第一种情况下它会给出一个错误,而在第二种情况下它工作正常?因为spring 4.3有一个功能-您不能为最终字段注入添加
自动连线的注释
您必须对最终字段进行构造函数初始化。我看不到LinksBuilder和resourceV4的一个。请参见lombok@RequiredArgsContractor
不可能一个具有最终字段的类编译为ok且没有构造函数,但另一个类编译为错误
运行其他编译器或构建方式(terminal gradlew/maven等)来澄清您的情况通过构造函数对属性进行@Autowire
或使其不是最终的
。顺便说一句,这不是Spring的问题,而是java的问题,因为final字段必须初始化。@Turing85,它可以工作,但我注入了其他final bean,没有任何问题,为什么我要使这个不是final的?正如我所说的:必须初始化final变量。这不是特定于spring的,而是在JLS中指定的。您的可能副本完全正确,我们使用的是lombok,我忘记在LinksBuilder上添加@RequiredArgsContractor