Как я могу привязать фабрику к точке внедрения с указанием аннотаций?

Я спросил и получил ответ, как привязать именованную точку внедрения.

И я не знаю, как привязать фабрику к квалифицированной точке впрыска.

class SomeResource {

    @Inject
    @Some // is a @Qualifier, of course.
    private MyType qualified;
}

Я подготовил завод

class SomeFactory extends Factory<MyType> {
}

И я застрял на создании связующего для этого

class SomeBinder extends AbstractBinder {
    @Override protected void configure() {
        // @@?
    }
}

Я действительно хочу знать, как использовать ServiceBindingBuilder#qualifiedBy.


person Jin Kwon    schedule 21.04.2015    source источник
comment
Нет, тип String — это просто пример. Я связываю другой тип.   -  person Jin Kwon    schedule 21.04.2015
comment
Мне нужно знать, как привязать фабрику к точке внедрения с аннотациями.   -  person Jin Kwon    schedule 21.04.2015


Ответы (1)


Мне нужна реализация для аннотации квалификатора.

public class Some_
    extends AnnotationLiteral<Some>
    implements Some {
}

Чтобы я мог использовать вот так.

bindFactory(Someactory.class)
    .qualifiedBy(new Some_())
    .to(MyType.class);

Я действительно не понимаю, почему ServiceBindingBuilder не имеет метода, принимающего класс аннотаций, а не экземпляр.

person Jin Kwon    schedule 21.04.2015
comment
Еще одна забавная вещь заключается в том, что если у вас есть фабрика для какого-то типа X, и она связана, то Джерси не заботится о фактической аннотации. Например, вы можете использовать пользовательский или размер (мин = 0). Ему просто нужна ЛЮБАЯ аннотация к полю/параметру, чтобы пройти проверку при запуске. Позже значение вводится с помощью factory. - person Aleksandr Kravets; 05.07.2017
comment
Также вы можете принять собственный ответ, если вы нашли решение самостоятельно. - person Aleksandr Kravets; 05.07.2017
comment
Мне не удалось заставить это решение работать, по крайней мере, с Джерси 2.25.1. При запуске Джерси будет выдавать java.lang.IllegalArgumentException: создание FactoryDescriptors должно иметь Factory в качестве контракта первого аргумента. В конце концов я создал пользовательскую аннотацию, как описано здесь stackoverflow.com/a/41436316/5661065 - person hayduke; 17.10.2017