Jakarta ee 带有@Qualifier列表的CDI编程查找
我正在寻找一种动态查找由注释列表注释的CDIBean的方法。 是否有一种优雅的方法来查找至少包含一个值的bean 这是我的注解:Jakarta ee 带有@Qualifier列表的CDI编程查找,jakarta-ee,cdi,Jakarta Ee,Cdi,我正在寻找一种动态查找由注释列表注释的CDIBean的方法。 是否有一种优雅的方法来查找至少包含一个值的bean 这是我的注解: @Qualifier @Retention(RUNTIME) @Target({ METHOD, FIELD, PARAMETER, TYPE }) public @interface SelectEngine { ProfilUser profil(); Periodicite periodicite(); int annee();
@Qualifier
@Retention(RUNTIME)
@Target({ METHOD, FIELD, PARAMETER, TYPE })
public @interface SelectEngine {
ProfilUser profil();
Periodicite periodicite();
int annee();
@Qualifier
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@interface List {
SelectEngine[] values();
}
}
下面是一个实现示例:
@SelectEngine.List({
@SelectEngine(profil = ProfilUser.CAS, annee = 2016, periodicite = Periodicite.MENSUELLE),
@SelectEngine(profil = ProfilUser.COMMERCIAL, annee = 2016, periodicite = Periodicite.MENSUELLE)
})
public class MoteurPMCOM2016 implements MoteurPrime<RapportPrimeMensuelle> {
/*implementation*/
}
@SelectEngine.List({
@选择引擎(profil=ProfilUser.CAS,annee=2016,periodicite=periodicite.MENSUELLE),
@选择引擎(profil=ProfilUser.COMMERCIAL,annee=2016,periodicite=periodicite.MENSUELLE)
})
公共级MoteurPMCOM2016实现MoteurPrime{
/*实施*/
}
在我以前版本的应用程序中,我使用了相同的注释,没有使用profil数组,并在实现中创建了@PRODUCTS方法,如下所示:
@Qualifier
@Retention(RUNTIME)
@Target({ METHOD, FIELD, PARAMETER, TYPE })
public @interface SelectEngine {
ProfilUser profil();
Periodicite periodicite();
int annee();
}
//The CDI bean implementation
@SelectEngine(profil = ProfilUser.COMMERCIAL, annee = 2016, periodicite = Periodicite.MENSUELLE)
public class MoteurPMCOM2016 implements MoteurPrime<RapportPrimeMensuelle> {
//For profil = ProfilUser.CAS I use the same implementation
@Produces
@SelectEngine(profil = ProfilUser.CAS, annee = 2016, periodicite = Periodicite.MENSUELLE)
public MoteurPrime<RapportPrimeMensuelle> forCASProfil( @SelectEngine(profil = ProfilUser.COMMERCIAL, annee = 2016, periodicite = Periodicite.MENSUELLE) engine) {
return engine;
}
/*implementation*/
}
@限定符
@保留(运行时)
@目标({方法,字段,参数,类型})
公共@interface SelectEngine{
ProfilUser profil();
Periodicite Periodicite();
int annee();
}
//cdibean实现
@选择引擎(profil=ProfilUser.COMMERCIAL,annee=2016,periodicite=periodicite.MENSUELLE)
公共级MoteurPMCOM2016实现MoteurPrime{
//对于profil=ProfilUser.CAS,我使用相同的实现
@产生
@选择引擎(profil=ProfilUser.CAS,annee=2016,periodicite=periodicite.MENSUELLE)
Casprofil的公共汽车发动机(@SelectEngine(profil=ProfilUser.COMMERCIAL,annee=2016,periodicite=periodicite.MENSUELLE)发动机){
返回引擎;
}
/*实施*/
}
谢谢大家! 您可以通过使用@products并在InjectionPoint解析注释来实现这一点。 不过,您必须以编程方式实例化实现,但这是一个解决方案
例如:哼。。。我对这些bean使用动态查找,我不能使用.getAnnoted()方法,但我认为我可以使用.getQualifiers()。我将很快发布我的解决方案。