Как работает аннотация @Resources

Я изучаю @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?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 826
1

Ответы 1

По сути, @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();

«внедрить ресурс внутри этого массива в свой класс» - не могли бы вы объяснить, как теперь использовать эти ресурсы после внедрения? любой пример реализации кода, пожалуйста.

nwzhaider 12.04.2018 11:30

Я редко использую @resources. Но когда проверяю реализацию ResourceInjector в org.apache.cxf.common.injection. он фактически перебирает массив ресурсов и создает ресурс один за другим. Я отредактирую свой ответ выше для вашей справки.

R.yan 13.04.2018 04:48

Другие вопросы по теме