Из официальной документации:
Методы
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);
Так в чем разница на практике?