@artemfisher

@Bean в @Configuration и @Component. Разница?

Из официальной документации:
Методы bean в обычном компоненте Spring обрабатываются иначе, чем их аналоги внутри @Configuration класса Spring. Разница в том, что @Component классы не дополнены CGLIB для перехвата вызова методов и полей. Проксирование CGLIB — это средство, с помощью которого вызов методов или полей внутри bean методов @Configuration классов создает ссылки на метаданные компонентов для взаимодействующих объектов. Такие методы не вызываются с обычной семантикой Java, а проходят через контейнер, чтобы обеспечить обычное управление жизненным циклом и проксирование bean-компонентов Spring, даже при обращении к другим bean-компонентам посредством программных вызовов методов bean. Напротив, вызов метода или поля в bean методе внутри простого @Component класса имеет стандартную семантику Java, без применения специальной обработки CGLIB или других ограничений.

Пробую в коде, работает одинаково, что при объявлении bean внутри @Configuration, что внутри @Component. (класс AppConfig)
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Shop shop = context.getBean("shop", Shop.class);


Так в чем разница на практике?
  • Вопрос задан
  • 436 просмотров
Пригласить эксперта
Ответы на вопрос 1
xez
@xez Куратор тега Java
TL Junior Roo
Обычно с помощью @Bean создают объекты, которые требуют дополнительной настройки. Часто это какие-то компоненты из библиотек, например, http клиенты, пулы подключений и т.д.
@Component и @Service используют обычно, когда ничего особенного при создании объекта не требуется.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы