Я пытаюсь понять javax.inject
пакет, и я не понимаю, для чего javax.inject.Named
предполагается использовать аннотацию. Javadoc не объясняет идею, лежащую в основе этого.
Javadoc находится по адресу http://download.oracle.com/javaee/6/api/javax/inject/Named.html.
Я использую Spring 3.0 для написания некоторых примеров программ, @Named
добавляя bean-компонент, он, кажется, добавляет его в bean-фабрику, но описание Javadoc настолько легкое, что я не могу сказать, стандартное ли это поведение или специфичное для Spring поведение.
Мои вопросы:
- В чем разница между
@Named
и@Qualifier
- Как вы должны сообщить системе времени выполнения, что класс должен быть внедрен в другие классы, какая аннотация для этого? Эквивалент
@Component
весны?
Обновление 1 есть отличное объяснение @Named
и @Qualifier
в Хорошей статье @Named
и @Qualifier
https://dzone.com/articles/java-ee6-cdi- named-components благодарит @xmedeko за ссылку на него в комментарии ниже.
java
spring
dependency-injection
java-ee-6
военно-картографическая служба
источник
источник
Ответы:
Используется
@Named
для различения разных объектов одного типа, связанных в одной области.Без
@Named
квалификатора инжектор не знал бы, какое время привязать к какой переменной.Если вы хотите создавать аннотации, которые действуют как аннотации
@Named
, используйте@Qualifier
аннотации при их создании.Если вы посмотрите
@Named
, он сам аннотирован@Qualifier
.источник
@Named
и@Qualifier
java.dzone.com/articles/java-ee6-cdi-@Inject
вместо Spring,@Autowired
чтобы ввести bean.@Named
вместо Spring@Component
для объявления bean-компонента.Эти стандартные аннотации JSR-330 сканируются и извлекаются так же, как аннотации Spring (если
jar
в вашем пути к классам есть следующее)источник
Что касается №2, согласно спецификации JSR-330:
Таким образом, поставщик должен определять, какие объекты доступны для внедрения. В случае Spring это все Spring beans. И любой класс, аннотированный аннотациями JSR-330, автоматически добавляется как компоненты Spring при использовании AnnotationConfigApplicationContext.
источник
Основная роль аннотации @Named состоит в том, чтобы определить bean-компонент для разрешения операторов EL в приложении, обычно через преобразователи JSF EL. Внедрение может быть выполнено с использованием имен, но инъекция в CDI должна была работать не так, поскольку CDI дает нам гораздо более богатый способ выразить точки внедрения и bean-компоненты, которые будут в них вставлены.
источник