Джерси 2.x пользовательские аннотации инъекций с атрибутами

Я нахожусь в процессе миграции с DropWizard 0.7.1 на 0.8.1. Это включает в себя миграцию с Джерси 1.x на 2.x. В моей реализации, которая использует Джерси 1.18.1, у меня былMyProvider (изменил все имена классов для простоты), который реализуетInjectableProvider, Этот класс создастMyInjectable объекты, содержащие пользовательскую аннотацию впрыска,MyToken. MyToken содержит различные атрибуты, которые передаются и читаютсяMyInjectable, Наконец, вApplication класс я регистрирую новый экземплярMyProvider, как видно ниже.

Я провел некоторое исследование и, похоже, не могу понять, как я воссоздаю (или, полагаю, заменю) такой сценарий в Джерси 2.x.

Вот текущая реализация 1.18.1:

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ ElementType.PARAMETER, ElementType.FIELD })
    public @interface MyToken {

        // Custom annotation containing various attributes
        boolean someAttribute() default true;
        // ...
    }

    public class MyProvider implements InjectableProvider<MyToken, Parameter> {

        // io.dropwizard.auth.Authenticator
        private final Authenticator<String, MyObject> authenticator;

        public MyProvider(Authenticator<String, MyObject> authenticator) {
            this.authenticator = authenticator;
        }

        @Override
        public ComponentScope getScope() {
            return ComponentScope.PerRequest;
        }

        @Override
        public Injectable<?> getInjectable(ComponentContext ic, MyToken t, Parameter p) {
            return new MyInjectable(authenticator, t.someAttribute());      
        }
    }

    class MyInjectable extends AbstractHttpContextInjectable<MyObject> {
        private final Authenticator<String, Session> authenticator;
        private final boolean someAttribute;

        public MyInjectable(Authenticator<String, MyObject> authenticator, boolean someAttribute) {
            this.authenticator = authenticator;
            this.someAttribute = someAttribute;
            // ... Removed a few paramters for simplicity's sake
        }

        @Override
        public MyObject getValue(HttpContext c) {
            final HttpRequestContext request = c.getRequest();
            // ... Removed code not pertaining to the question
            return myObject;
        }
    }

// Lastly, the register call in the io.dropwizard.Application class
environment.jersey().register(new MyProvider(new MyProviderValidator(someValidator)));

Ответы на вопрос(1)

Ваш ответ на вопрос