Назад к вопросам
Junior
140
questionbank

Какие аннотации ты знаешь для того, чтобы Spring создавал бины на основании этих аннотаций?

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

  • @Component - общая аннотация для управляемых компонентов.
  • @Repository - для классов доступа к данным (DAO).
  • @Service - для классов бизнес-логики.
  • @Controller - для классов, представляющих REST-контроллеры (@RestController - это @Controller + @ResponseBody).
  • @Configuration - для классов, содержащих методы, помеченные @Bean.
  • @Bean - для создания экземпляра бина методом, находящимся в классе @Configuration.
  • @Scope - определяет область видимости бина (singleton, prototype, request, session, application, websocket).
  • @Lazy - указывает на ленивую инициализацию бина.
  • @Primary - указывает предпочтительный бин при наличии нескольких кандидатов одного типа.
  • @Qualifier - используется с @Autowired для указания конкретного бина по имени при наличии нескольких кандидатов одного типа.
  • @Profile - указывает, что бин должен быть создан только при активном определенном профиле.
  • @Value - для внедрения значений из properties-файлов.
  • @Autowired - для автоматического связывания зависимостей (внедрения бинов).
  • @Required - (устаревшая, но может встречаться) указывает, что свойство должно быть установлено при конфигурации.

Пример использования @Configuration и @Bean:

// src/main/java/com/example/config/AppConfig.java
package com.example.config;

import com.example.service.MyService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration // Указывает на класс конфигурации Spring
public class AppConfig {

    @Bean // Указывает, что метод создает бин
    public MyService myService() {
        return new MyService(); // Создание экземпляра бина
    }
}

Пример использования @Component:

// src/main/java/com/example/component/MyComponent.java
package com.example.component;

import org.springframework.stereotype.Component;

@Component // Указывает на компонент, управляемый Spring контейнером
public class MyComponent {

    // ... логика компонента
}