Когда вы используете @Autowire, вы на самом деле делаете autowire по типу.@Autowire просто внедряет реализацию bean-компонента shopRepo.Реализация shopRepo динамически создается в репозиториях jpa, обычно во время запуска контейнера Spring.
Ваша конфигурация xml не выполняет автоматическую разводку по типу, она пытается внедрить компонент с идентификатором "shopRepo" в компонент shopcontroller.Определение shopRepo в вашем xml - это просто определение, а не имя фактической реализации, созданной репозиторием jpa.
Вы можете следовать этому в своем xml-файле.Надеюсь это поможет.
<bean id="shopRepo" class="com.example.shop.repository.ShopRepo" abstract="true"/>
<bean id="shopController" class="com.example.shop.controller.ShopController" autowire="byType">
</bean>