Как настроить бин в Spring с помощью аннотаций?

«Как настроить бин в Spring с помощью аннотаций?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Аннотации — это современный и наиболее распространенный способ конфигурации в Spring. Они позволяют объявлять бины и их зависимости прямо в Java-коде.

Основные аннотации для объявления бинов:

Аннотация Назначение
@Component Универсальный стереотип для любого бина, управляемого Spring.
@Service Специализация @Component для бинов бизнес-логики (сервисного слоя).
@Repository Специализация @Component для бинов доступа к данным (DAO). Добавляет трансляцию исключений.
@Controller / @RestController Для бинов веб-слоя (MVC или REST API).
@Configuration Помечает класс как источник конфигурации, содержащий методы @Bean.
@Bean В методе внутри @Configuration-класса — определяет бин для возвращаемого объекта.

Аннотации для внедрения зависимостей и конфигурации:

  • @Autowired — автоматическое связывание (by type).
  • @Qualifier — уточнение имени бина при внедрении.
  • @Value — инъекция значений из properties-файлов.
  • @Scope — определение области видимости (singleton, prototype и др.).
  • @PostConstruct, @PreDestroy — методы жизненного цикла.

Пример сервиса с аннотациями:

@Service // Объявляет этот класс как Spring-бин
@Scope("prototype") // Создаёт новый экземпляр при каждом запросе
public class UserService {

    @Value("${app.default.role}") // Инъекция значения из application.properties
    private String defaultRole;

    @Autowired // Автоматическое внедрение зависимости
    private UserRepository userRepository;

    @PostConstruct // Метод выполнится после инициализации бина
    public void init() {
        System.out.println("UserService initialized with role: " + defaultRole);
    }
}

Преимущества: лаконичность, проверка типов на этапе компиляции, тесная связь с кодом.