Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring错误:(21,34)java:变量customUriBuilder未在默认构造函数中初始化_Java_Spring_Dependency Injection - Fatal编程技术网

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