Sobes.tech
Назад к вопросам
Junior — Middle
80

Какие основные отличия между аннотациями @Controller, @Service, @Component и @Repository в Spring?

Ответ от нейросети

sobes.tech AI

В Spring Framework аннотации @Controller, @Service, @Component и @Repository используются для маркировки классов и регистрации их как бинов в контексте Spring, но имеют разные семантические значения:

  • @Component — базовая аннотация для любого компонента Spring. Используется для общих классов, которые не подходят под другие категории.

  • @Controller — специализированный компонент, обозначающий класс, который обрабатывает HTTP-запросы в MVC-приложении. Обычно содержит методы с аннотациями @RequestMapping.

  • @Service — обозначает сервисный слой, где реализуется бизнес-логика. Помогает отделить логику от контроллеров и репозиториев.

  • @Repository — аннотация для слоя доступа к данным (DAO). Помимо регистрации бина, она также переводит исключения доступа к данным в унифицированные исключения Spring (DataAccessException).

Пример:

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/users")
    public String listUsers(Model model) {
        model.addAttribute("users", userService.getAllUsers());
        return "userList";
    }
}

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

Таким образом, аннотации помогают структурировать приложение и улучшить читаемость кода.