Что является javax.впрыскивать.Именованная аннотация должна использоваться для?


Я пытаюсь понять javax.inject пакет и я не понимаю, что такое javax.inject.Named аннотация должна использоваться для. Javadoc не объясняет идею, стоящую за ним.

Javadoc находится в http://download.oracle.com/javaee/6/api/javax/inject/Named.html

я использую Весна 3.0 чтобы написать некоторые примеры программ, поставив @Named на бобе кажется, что он добавляет его к фабрике бобов, но описание Javadoc таково свет я не могу сказать, является ли это стандартным поведением или весенним конкретным поведением.

мои вопросы:

  1. в чем разница между @Named и @Qualifier
  2. как вы должны сказать системе времени выполнения, что класс должен быть инъекционным в других классах, какова аннотация для этого? Эквивалент @Component весной?

обновление 1 есть отличное объяснение @Named и @Qualifier в хорошей статье о @Named и @Qualifierhttp://java.dzone.com/articles/java-ee6-cdi-named-components спасибо @xmedeko за ссылку на него комментарий ниже.

4 90

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 дает нам гораздо более богатый способ выразить точки инъекции и бобы, которые будут введены в них.