Penso di aver capito come funziona il CDI e per immergermi in profondità, mi piacerebbe provare ad usarlo con un esempio di mondo reale. Sono bloccato con una cosa in cui ho bisogno del tuo aiuto per farmi capire. Gradirei davvero il tuo aiuto in questo senso.Il metodo CDI @Producer può assumere parametri personalizzati?
Ho il mio framework del flusso di lavoro sviluppato utilizzando Java reflection API e configurazioni XML dove basato sul tipo specifico di "source" e "eventName" carico la classe Module appropriata e invoco il metodo "process" su quello. Tutto sta funzionando bene nel nostro progetto.
mi sono emozionato con la caratteristica di CDI e voleva dargli provare con la struttura del flusso di lavoro in cui sto progettando iniettare classe modulo invece di caricare utilizzando Riflessione ecc ...
Giusto per darvi un'idea, cercherò per mantenere le cose semplici qui.
"Message.java" è un tipo di oggetto di trasferimento che trasporta "Source" e "eventName", in modo che possiamo caricare il modulo in modo appropriato.
public class Message{
private String source;
private String eventName;
}
configurazioni del modulo sono le seguenti
<modules>
<module>
<source>A</source>
<eventName>validate</eventName>
<moduleClass>ValidatorModule</moduleClass>
</module>
<module>
<source>B</source>
<eventName>generate</eventName>
<moduleClass>GeneratorModule</moduleClass>
</module>
</modules>
ModuleLoader.java
public class ModuleLoader {
public void loadAndProcess(Message message){
String source=message.getSource();
String eventName=message.getEventName();
//Load Module based on above values.
}
}
Domanda
Ora, se voglio implementare stessa via CDI me per iniettare un modulo (nella classe ModuleLoader), posso scrivere in classe Factory con il metodo @Produce, che può farlo. MA la mia domanda è,
a) come può passare oggetto messaggio al metodo @Produce per fare ricerca basata su eventName e origine?
Potete fornire suggerimenti?
Grazie in anticipo.
Si noti che il trucco InjectionPoint funziona solo se si @propone un bean con ambito dipendente. Per i bean con valori normali (SessionScoped, ApplicationScoped, RequestScoped, ecc.) Non funzionerà perché si hanno più punti di iniezione e non solo uno solo. – struberg