我正在研究一個CDI擴展,它需要用所有發現的bean填充一個HashMap
,然後在生命週期事件期間實例化一個@ApplicationScoped
bean並將HashMap
傳遞給新實例化的bean。如何在CDI AfterDeploymentValidation生命週期事件期間實例化一個bean並將參數傳遞給bean?
使用下面的代碼,我可以找到任何已經使用@CQRSCommandHandler
進行註釋的bean,並使用註釋中bean的名稱和參數集填充HashMap
。
public class CQRSExtension implements Extension {
private Map<String, String> discoveredCommandHandlers = new HashMap<String, String>();
public <T> void processAnnotatedType(@Observes @WithAnnotations({ CQRSCommandHandler.class }) ProcessAnnotatedType<T> processAnnotatedType) {
AnnotatedType<T> annotatedType = processAnnotatedType.getAnnotatedType();
String commandName = annotatedType.getAnnotation(CQRSCommandHandler.class).command().getName();
String handlerName = annotatedType.getJavaClass().getName();
discoveredCommandHandlers.put(commandName, handlerName);
}
}
我正在掙扎是我應該如何急切地實例化bean並通過HashMap
到這個bean。
我可以找到大量的例子,如這一個(http://ovaraksin.blogspot.co.uk/2013/02/eager-cdi-beans.html)說明如何熱切實例具有特定註釋的bean,但是我不能工作了如何實例化一個特定的bean,並通過一個HashMap
到這個bean。
理想情況下,我寧願不使用反射來掃描註釋。
如何實例化一個特定的bean並將HashMap
傳遞給此bean?或者,有沒有更好的方法來實現相同的結果而不使用反射?