Ответ
Аннотации Spring можно разделить на несколько ключевых категорий:
1. Аннотации для объявления бинов (стереотипные)
@Component— универсальный маркер для любого управляемого Spring bean.@Service— специализация@Componentдля бизнес-логики (сервисного слоя).@Repository— для слоя доступа к данным (DAO). Добавляет трансляцию исключений JDBC вDataAccessException.@Controller/@RestController— для веб-слоя (MVC и REST контроллеры).
2. Аннотации для внедрения зависимостей (DI)
@Autowired— автоматическое связывание по типу.@Qualifier("имяБина")— уточняет, какой конкретный бин внедрить при наличии нескольких кандидатов.@Value("${property.name}")— внедряет значение из файла свойств (application.properties).
3. Аннотации для конфигурации
@Configuration— указывает, что класс содержит конфигурацию на основе бинов.@Bean— объявляет бин в методе конфигурационного класса.@Profile("dev")— активирует бин/конфигурацию только для указанного профиля.@PropertySource("classpath:app.properties")— загружает файл свойств.
4. Аннотации для Spring MVC / REST
@RequestMapping,@GetMapping,@PostMappingи др. — маппинг HTTP-запросов.@PathVariable— извлечение переменной из пути URL.@RequestParam— извлечение параметра из строки запроса.@RequestBody/@ResponseBody— привязка тела запроса/ответа.
Пример REST-контроллера:
@RestController // = @Controller + @ResponseBody
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return ResponseEntity.ok(user);
}
@PostMapping
public ResponseEntity<User> createUser(@RequestBody UserDto userDto) {
User created = userService.create(userDto);
return ResponseEntity.status(HttpStatus.CREATED).body(created);
}
}