0
我正在尋找一種動態查找由註釋列表註釋的CDI bean的方法。 有沒有一種優雅的方式來查找包含至少一個值的bean?CDI編程查找與@Qualifier列表
這是我的註解:
@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*/
}
在我以前的版本我用同樣的註釋而不PROFIL陣列的應用程式和內部創建@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*/
}
謝謝!
好主意謝謝! –
嗯......我使用動態查找這些bean,我不能使用.getAnnoted()方法,但我想我可以使用.getQualifiers()。我會很快發佈我的解決方案。 –