Какие основные отличия между аннотациями @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> {
}
Таким образом, аннотации помогают структурировать приложение и улучшить читаемость кода.