Оба @Component и @Named для одного и того же класса компонентов
Является ли класс, который будет действовать как компонент в приложении Spring, одновременно требует как @Component
и @Named
?
Каково значение, если оба они используются?
Я попробовал поиск в сети, а также увидел стандартную документацию этих аннотаций и нашел их немного запутанными.
Наконец, какое имя принимает приложение, если аннотация @Named
не указывает имя для компонента?
Ответы
Ответ 1
@Component
и @Named
- это аннотации, которые в основном делают то же самое, но поступают из разных API.
@Component
принадлежит Spring API. Он маркирует класс, который будет автоматически идентифицироваться как компонент и необязательно позволяет указать имя для этого компонента (@Component("foo")
). Без явного определения спецификации имени bean получит имя по умолчанию, полученное от имени своего класса.
@Named
принадлежит API javax.inject
. Он обозначает класс, который будет автоматически идентифицирован как компонент, и требует указать имя.
Spring поддерживает оба этих API. Не имеет смысла использовать обе аннотации в том же классе, поскольку они обеспечивают ту же функциональность.
Смотрите также:
Ответ 2
Spring поддерживает @Named
аннотацию (JSR-330) в качестве альтернативы @Component
(Spring).
Как правило, @Named
плохо называется, так как не описывает, что он делает, поэтому я бы предпочел использовать @Component
всякий раз, когда могу.
Ответ 3
Любой из них должен использоваться. Использование @Component и @Named не имеет никакого смысла. Добавление в комментарий выше (Компонента) @Component ("[someComponentID]") и @Named ("[someNamedID]"), чтобы назначить идентификатор компоненту, передав идентификатор в скобках, если не неявно назначен один.