Visto il moltiplicarsi dei framework per la dependency injection in Java negli ultimi anni (CDI, Guice…), sembra ormai scontato che questo pattern sia fondamentale per la realizzazione di applicazioni enterprise complesse.
Creare un dependency injector, al contrario, è qualcosa di molto semplice. Basta usare un po’ di refection.
Prendiamo un esempio: PrizeManager è una semplice classe che, dati degli utenti e dei premi, assegna questi randomicamente, informando un altro oggetto (MainController) dello stato delle cose.
package it.nerdammer; import java.util.Collections; import java.util.List; public class PrizeManager { @Inject private MainController mainController; @Inject private List<User> users; @Inject private List<Prize> prizes; public void assignPrizes() { mainController.start(); Collections.shuffle(users); Collections.shuffle(prizes); for(int i=0; i<users.size() && i<prizes.size(); i++) { // assegna i premi users.get(i).winPrize(prizes.get(i)); } mainController.stop(); } }
Il compito del dependency injector è quello di impostare i riferimenti dei campi annotati con l’annotazione @Inject.