Что является javax.впрыскивать.Именованная аннотация должна использоваться для?
Я пытаюсь понять javax.inject
пакет и я не понимаю, что такое javax.inject.Named
аннотация должна использоваться для. Javadoc не объясняет идею, стоящую за ним.
Javadoc находится в http://download.oracle.com/javaee/6/api/javax/inject/Named.html
я использую Весна 3.0 чтобы написать некоторые примеры программ, поставив @Named
на бобе кажется, что он добавляет его к фабрике бобов, но описание Javadoc таково свет я не могу сказать, является ли это стандартным поведением или весенним конкретным поведением.
мои вопросы:
- в чем разница между
@Named
и@Qualifier
- как вы должны сказать системе времени выполнения, что класс должен быть инъекционным в других классах, какова аннотация для этого? Эквивалент
@Component
весной?
обновление 1 есть отличное объяснение @Named
и @Qualifier
в хорошей статье о @Named
и @Qualifier
http://java.dzone.com/articles/java-ee6-cdi-named-components спасибо @xmedeko за ссылку на него комментарий ниже.
4 ответа:
используйте @Named для различения различных объектов одного типа, связанных в одной области.
@Named("maxWaitTime") public long maxWaitTimeMs; @Named("minWaitTime") public long minWaitTimeMs;
без квалификатора @Named инжектор не знал бы, какое время привязать к какой переменной.
Если вы хотите создать аннотации, которые действуют как @Named, используйте аннотацию @Qualifier при их создании. Если вы посмотрите на @Named, он сам аннотируется с помощью @Qualifier.
@Inject
вместо весны@Autowired
чтобы ввести Боб.@Named
вместо весны@Component
чтобы объявить Боб.те JSR-330 стандартные аннотации сканируются и извлекаются так же, как и аннотации Spring (при условии, что следующее
jar
находится в вашем classpath)
относительно #2, согласно спецификации JSR-330:
этот пакет предоставляет зависимость примечания для инъекций, которые позволяют переносимые классы, но это оставляет настройка внешних зависимостей вверх к реализации инжектора.
Так что это до поставщика, чтобы определить, какие объекты доступны для инъекций. В случае весны это все весенние бобы. И любой класс, аннотированный аннотациями JSR-330, автоматически добавляется как Весенние бобы при использовании AnnotationConfigApplicationContext.
основная роль аннотации @Named заключается в определении компонента для разрешения операторов EL в приложении, обычно через JSF El resolvers. Инъекция может быть выполнена с использованием имен, но это было не так, как инъекция в CDI должна была работать, так как CDI дает нам гораздо более богатый способ выразить точки инъекции и бобы, которые будут введены в них.