Вопрос проверяет умение находить типичные ошибки и антипаттерны в коде Java Spring приложения во время code review, что критически важно для поддержания качества, безопасности и производительности сервиса.
Одна из частых проблем — смешивание ответственности слоёв. Например, бизнес-логика в контроллере или запросы к БД прямо из сервиса, минуя репозиторий. Это нарушает принцип единственной ответственности (SRP) и усложняет тестирование. Стоит искать слишком большие классы (God Object) и методы, которые нужно разбить.
Spring предоставляет много инструментов, но их нужно правильно использовать. Критически важно проверять:
Типичные ошибки, влияющие на производительность:
Нужно проверять, правильно ли объявлены транзакции (@Transactional). Например, транзакция только на чтение для операций select или правильный уровень изоляции. Обработка исключений должна быть централизована через @ControllerAdvice, а не разбросана по коду. Исключения из репозиториев должны преобразовываться в понятные пользовательские или системные ошибки.
Следует обращать внимание на код-стайл, именование, отсутствие закомментированного кода ("мертвого кода"). Важно наличие модульных и интеграционных тестов, их покрытие и осмысленность. Внедрение зависимостей должно быть через конструктор (а не через @Autowired поля), что упрощает тестирование.
// Плохой пример: бизнес-логика в контроллере и отсутствие валидации
@RestController
public class BadController {
@Autowired
private UserRepository repo; // Внедрение в поле
@PostMapping("/user")
public User createUser(@RequestBody User user) {
// Нет валидации!
// Прямой вызов репозитория с логикой
if (repo.findByEmail(user.getEmail()) != null) {
throw new RuntimeException("Email exists"); // Неспецифичное исключение
}
return repo.save(user);
}
}
// Улучшенный вариант
@RestController
@RequiredArgsConstructor // Внедрение через конструктор
public class GoodController {
private final UserService userService;
@PostMapping("/user")
public ResponseEntity createUser(@Valid @RequestBody CreateUserRequest request) {
UserDto created = userService.createUser(request);
return ResponseEntity.status(HttpStatus.CREATED).body(created);
}
}
// Сервис и валидация вынесены, используется DTO.Вывод: Code review в Spring проекте — это не только поиск багов, но и контроль за архитектурой, безопасностью и долгосрочной поддерживаемостью кода. Особое внимание стоит уделять типичным для фреймворка проблемам, таким как транзакционность и работа с JPA.