Я изучаю @Resource, инъекцию @Resources в java. Документы Oracle и некоторые другие сайты объясняют внедрение ресурсов полей, методов и классов с помощью аннотации @Resource, но я не смог найти справки по внедрению нескольких ресурсов класса с использованием аннотации @Resources - на самом деле я хочу знать, как несколько ресурсов объявлены аннотацией @Resources в классе будет использоваться в классе? Пример, который я вижу в документации оракула на других сайтах, приведен ниже:
@Resources({
@Resource(name = "myMessageQueue",
type = "javax.jms.ConnectionFactory"),
@Resource(name = "myMailSession",
type = "javax.mail.Session")
})
public class SomeMessageBean {
...
}
Но как я буду использовать myMessageQueue и myMailSession в теле класса? Итак, кто-нибудь может объяснить реализацию тела класса или реализацию примера метода, показывающую использование выше объявленных ресурсов с помощью аннотации @Resources?




По сути, @Resources - это всего лишь массив ресурсов, который вводит ресурс внутри этого массива в ваш класс во время выполнения.
package javax.annotation;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
/**
* This class is used to allow multiple resources declarations.
*
* @see javax.annotation.Resource
* @since 1.6, Common Annotations 1.0
*/
@Documented
@Retention(RUNTIME)
@Target(TYPE)
public @interface Resources {
/**
* Array used for multiple resource declarations.
*/
Resource[] value();
}
РЕДАКТИРОВАТЬ Следующий код взят из агрегата от org.apache.cxf.common.injection.ResourceInjector.
79: // Implementation of org.apache.cxf.common.annotation.AnnotationVisitor
80:
81: public final void visitClass(final Class<?> clz, final Annotation annotation) {
82:
83: assert annotation instanceof Resource || annotation instanceof Resources : annotation;
84:
85: if (annotation instanceof Resource) {
86: injectResourceClassLevel(clz, (Resource)annotation);
87: } else if (annotation instanceof Resources) {
88: Resources resources = (Resources)annotation;
89: for (Resource resource : resources.value()) {
90: injectResourceClassLevel(clz, resource);
91: }
92: }
93:
94: }
Вы можете видеть в строке89, он проходит через массив ресурсов и вводит ресурсы.
Кстати, вы можете получить массив ресурсов с помощью Resource[] resoruces = CLASS_NAME.class.getAnnotation(Resources.class).value();
Я редко использую @resources. Но когда проверяю реализацию ResourceInjector в org.apache.cxf.common.injection. он фактически перебирает массив ресурсов и создает ресурс один за другим. Я отредактирую свой ответ выше для вашей справки.
«внедрить ресурс внутри этого массива в свой класс» - не могли бы вы объяснить, как теперь использовать эти ресурсы после внедрения? любой пример реализации кода, пожалуйста.