Оба @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]"), чтобы назначить идентификатор компоненту, передав идентификатор в скобках, если не неявно назначен один.