Вы складываете множество фреймворков, что вносит путаницу. Путаница, вероятно, связана с тем, что вы используете Lombok. @AllArgsConstructor
автоматически добавляет конструктор со всеми аргументами, необходимыми для создания экземпляра службы.
@AllArgsConstructor
создает конструктор с 1 параметром для каждого поля в вашем класс. Поля, отмеченные @NonNull
, приводят к нулевым проверкам этих параметров. - Источник: Документация Lombok
Использование @AllArgsConstructor
эффективно генерирует следующий класс
@Service
@Transactional
public class StudentService {
private final StudentRepository studentRepo;
public StudentService(StudentRepository studentRepo) {
this.studentRepo=studentRepo;
}
// complete service code using studentRepo
}
Теперь, поскольку этот класс имеет только один конструктор, Spring будет использовать его для внедрения зависимостей. . Это называется инъекцией зависимостей на основе конструктора.
@Service
@Transactional
public class StudentService {
@Autowire
private StudentRepository studentRepo;
// complete service code using studentRepo
}
В то время как это называется инъекцией зависимостей на основе поля.
ИМХО, вам следует предпочесть инъекцию зависимостей на основе конструктора по простой причине, что это очень легко использовать и прямо в лицо. Вы можете легко протестировать его, пока с инъекцией поля писать модульный тест сложно (э-э), так как вам нужно отражение, чтобы ввести поле.
См. Также Внедрение зависимостей в Java для получения дополнительной информации подробное объяснение различных стилей внедрения зависимостей.