【发布时间】:2016-02-27 09:29:08
【问题描述】:
我正在寻找一种方法来动态查找由注释列表注释的 CDI bean。 有没有一种优雅的方法来查找包含至少一个值的 bean?
这是我的注释:
@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*/
}
在我以前版本的应用程序中,我使用了相同的注释,没有配置文件数组,并在实现中创建了一个 @Produces 方法,如下所示:
@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*/
}
谢谢!
【问题讨论】:
标签: jakarta-ee cdi