Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Spring: spring, bean, annotation

Чем аннотация @Bean отличается от @Service/@Component?

Вопрос проверяет понимание различных типов аннотаций Spring для создания бинов и их назначения.

Короткий ответ

@Bean используется в конфигурационных классах для явного создания бинов, часто для сторонних классов. @Component, @Service, @Repository — это стереотипные аннотации для автоматического сканирования и создания бинов из ваших классов. @Service и @Repository являются специализированными версиями @Component с дополнительной семантикой.

Длинный ответ

Spring Framework предоставляет несколько способов определения бинов, каждый со своей областью применения.

@Bean аннотация:

  • Используется в классах, помеченных @Configuration

  • Позволяет явно определить метод создания бина

  • Подходит для сторонних классов, которые нельзя пометить аннотациями Spring

  • Пример:

    @Configuration
    public class AppConfig {
        @Bean
        public DataSource dataSource() {
            return new HikariDataSource();
        }
    }

Стереотипные аннотации (@Component, @Service, @Repository):

  • Используются для автоматического сканирования компонентов

  • Применяются непосредственно к классам

  • Активируются через @ComponentScan

Различия между стереотипными аннотациями:

  1. @Component:

    • Базовая аннотация для любого Spring-компонента

    • Универсальное использование

  2. @Service:

    • Специализация @Component для бизнес-логики

    • Не несет дополнительной функциональности, но улучшает читаемость

  3. @Repository:

    • Специализация @Component для доступа к данным

    • Автоматически преобразует исключения в Spring DataAccessException

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

@Service
public class UserService {
    // бизнес-логика
}

@Repository
public class UserRepository {
    // доступ к данным
}

@Configuration
public class Config {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Вывод: @Bean используется для явного конфигурирования, в то время как стереотипные аннотации предназначены для автоматического обнаружения компонентов с различной семантикой.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Spring

    Spring

Ключевые слова

#spring

#bean

#annotation

Подпишись на Java Developer в телеграм