Ошибка Spring: (21, 34) java: переменная customUriBuilder не инициализирована в конструкторе по умолчанию - PullRequest
0 голосов
/ 14 июня 2019

У меня есть 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 Ответ

1 голос
/ 15 июня 2019

С весны 4.3 появилась особенность - вы не можете добавить Autowired аннотацию для окончательного ввода полей

У вас должна быть инициализация конструктора для конечных полей.Я не могу видеть один для LinksBuilder и resourceV4.См. Lombok @RequiredArgsContructor для краткости.

Невозможно, чтобы один класс с конечным полем компилировался нормально и без конструктора, но другой с ошибкой.

Запуск других компиляторов или способов сборки(терминал Gradlew / Maven и т. д.), чтобы прояснить ситуацию для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...