2014-01-22 4 views
1

Если у меня есть экземпляр класса InjectPoint, как я могу прочитать атрибуты аннотации из него. то есть: с аннотацией Qualifier @MyCar(mpg="23")Как читать атрибут привязки с использованием точки впрыска java cdi

Как бы я получить мили на галлон и "23", если у меня есть injectionPoint когда MyCar впрыскивается?

@Inject 
public void injectionTest(@MyCar(mpg="23") Car _car,InjectionPoint ip) 
{ 
... 
} 


@Qualifier 
@Retention(RUNTIME) 
@Target({TYPE, METHOD, FIELD, PARAMETER}) 
public @interface MyCar 
{ 
    @Nonbinding 
    String mpg() default "30"; 
} 

ответ

3
for(Annotation a : injectionPoint.getQualifiers()) 
{ 
    if(a instanseof MyCar) 
    { 
    MyCar myCar = (MyCar) a; 
    a.mpg(); 
    } 
} 
+0

я должен делать что-то не так, я только получаю = класс com.sun.proxy. $ Proxy12, когда я вхожу типы а, нет MyCar экземпляров – user18896654353

+0

@ user1889665 делает 'InstanceOf не MyCar' вернуть Объёмное 'для любого из них? – kan

+0

это не так, но я добавил его к фабричному методу MyCar, и он сообщил об этом. хотя аннотация в классе A я предполагаю, что правильный способ - прочитать ее в заводском методе и задать() поля для хранения параметров – user18896654353

1

Вы можете избежать переборе аннотаций с использованием метода getAnnotated. Вы также можете получить доступ к другим аннотациям таким образом, а не только к квалификаторам.

MyCar myCar = ip.getAnnotated().getAnnotation(MyCar.class); 
System.out.println(myCar.mpg()); 
Смежные вопросы