Spring错误:(21,34)java:变量customUriBuilder未在默认构造函数中初始化

时间:2019-06-14 13:54:46

标签: java spring dependency-injection

我有Spring bean

@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
}

我需要将这个bean注入另一个bean

@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 
    .
}

为什么在第一种情况下会给出错误,但在第二种情况下却能正常工作?

1 个答案:

答案 0 :(得分:1)

从4.3版本开始,就有一个功能-您不能为最终的字段注入添加Autowired注释

您必须对最终字段进行构造函数初始化。我看不到一个LinksBuilder和resourceV4。简称为龙目岛@RequiredArgsContructor

一个带有final字段的类不可能在没有构造函数的情况下正常编译,而另一个带有错误的类是不可能的。

运行其他编译器或构建方式(终端gradlew / maven等)为您澄清情况