Основные аннотации Spring
Регистрация и конфигурация
| Аннотация | Назначение |
|---|---|
@Configuration | класс конфигурации |
@Bean | factory-метод bean |
@Component | компонент для scanning |
@Service | компонент сервисного слоя |
@Repository | persistence-компонент и перевод исключений |
@Controller | MVC-контроллер с представлением |
@RestController | controller + тело ответа |
@ComponentScan | где искать компоненты |
@Import | явно подключить конфигурацию/компонент |
Внедрение и выбор
@Autowired— разрешить зависимость;@Qualifier— выбрать кандидата;@Primary— кандидат по умолчанию;@Value— внедрить отдельное значение;@ConfigurationProperties— связать группу настроек с типом.
Для обязательной зависимости предпочтителен конструктор. Для набора настроек — типизированный properties-класс вместо множества строковых @Value.
Условия и жизненный цикл
@Profileи@Conditional...— условная регистрация;@Lazy— отложенное создание или proxy;@Scope— область жизни;@PostConstruct/@PreDestroy— callbacks;@Order— порядок поддерживаемых цепочек/коллекций.
Инфраструктурное поведение
@Transactional— транзакционный interceptor;@Async— выполнение через executor;@Cacheable,@CachePut,@CacheEvict— кэш;@Scheduled— запуск по расписанию;@EventListener— обработчик события.
Большинство таких аннотаций действует через Spring Proxy. Поэтому важны внешняя точка вызова, видимость метода и факт, что объект создан контейнером.
Web MVC
@RequestMapping,@GetMapping,@PostMappingи другие;@PathVariable,@RequestParam,@RequestHeader;@RequestBody,@ResponseBody;@ControllerAdvice,@ExceptionHandler;@Validдля запуска Bean Validation.
Вопросы для повторения
- Чем
@Beanотличается от@Component? Первый регистрируется factory-методом, второй находится scanning. @RestControllerчто объединяет?@Controllerи@ResponseBody.- Почему
@Transactionalможет не сработать? Вызов обошёл proxy либо объект создан вручную. - Когда
@ConfigurationPropertiesлучше@Value? Для связанной группы типизированных настроек. @Orderзадаёт порядок создания бинов? Обычно нет; он упорядочивает коллекции и поддерживаемые цепочки.
Связано: Бин отличие от Component, Способы внедрения зависимостей Spring, Контроллеры Spring.