2015-04-21 3 views
1

I asked и получил ответ, как связать именованную точку впрыска.Как я могу привязать завод к подходящей точке ввода для аннотации?

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

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.

+0

Нет типа 'String', это просто пример. Я связываю другой тип. –

+0

Мне нужно знать, как связать фабрику с подходящей для инъекций точкой инъекции. –

+0

Gotcha ......... –

ответ

3

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

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

Так что я могу использовать вот так.

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

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

+0

Еще одна забавная вещь: если у вас есть фабрика для какого-то типа X, и это связано, то Джерси не дает дерьма о фактической аннотации. Например, вы можете использовать пользовательский вариант или размер (min = 0). Ему просто нужна ЛЮБАЯ аннотация по полю/параметру, чтобы пройти проверку при запуске. Позже значение вводится с использованием фабрики. –

+0

Также вы можете принять собственный ответ, если нашли решение самостоятельно –

+0

Я не мог получить это решение для работы, по крайней мере, с помощью Jersey 2.25.1. При запуске Джерси будет бросать java.lang.IllegalArgumentException: Создание FactoryDescriptors должно иметь Factory как контракт первого аргумента. В конечном итоге я создал пользовательскую аннотацию, описанную здесь. Https://stackoverflow.com/a/41436316/5661065 – hayduke