Ответ 1
@Named
работает так же, как @Component
. Однако аннотации @Controller
, @Service
и @Repository
более конкретны.
Из Spring docs:
@Component
является общим стереотипом для любого компонента, содержащего Spring.@Repository
,@Service
и@Controller
являются специализациями@Component
для более конкретных случаев использования, например, в персистентности, обслуживания и представления, соответственно.Например, эти аннотации стереотипов создают идеальные цели для. срезы в Возможно также, что
@Repository
,@Service
и@Controller
может нести дополнительную семантику в будущих выпусках Spring Рамки. Таким образом, если вы выбираете между@Component
или@Service
для вашего уровня обслуживания,@Service
явно лучше выбор. Аналогично, как указано выше,@Repository
уже поддерживается как маркер автоматического перевода исключений в вашем постоянстве слой.
В этом разделе объясняется разница с @Named
.
Многие компоненты, такие как Spring DispatcherServlet
(конфигурация MVC в WebApplicationContext
), не ищут Component
, они ищут @Controller
. Поэтому, когда он сканирует ваш класс, он не найдет его в @Named
. Аналогичным образом управление транзакциями с помощью @Transactional
ищет @Service
и @Repository
, а не для более общего @Component
.