Diciamo che ho una classe di utilità DateUtil (vedi sotto). Per utilizzare questo metodo, , un metodo chiamante utilizza DateUtils.getDateAsString (aDate). Sarebbe meglio rimuovere il modificatore statico e rendere DateUtil un bean spring (vedi DateUtilsBean) e iniettarlo nelle classi di chiamata o lasciarlo così com'è?Classe di utilità nell'applicazione Spring - dovrei usare metodi statici o no?
Uno svantaggio che posso vedere con l'utilizzo di statica è edizioni intorno beffardo, vedere How to mock with static methods?
public class DateUtils {
public static String getDateAsString(Date date) {
String retValue = "" // do something here using date parameter
return retValue;
}
}
Primavera Bean versione
@Component
public class DateUtilsBean {
public String getDateAsString(Date date) {
String retValue = "" // do something here using date parameter
return retValue;
}
}
concordato. Solo perché tutto ciò che è necessario essere cablato come un fagiolo di primavera non significa che tutto dovrebbe essere collegato come un fagiolo di primavera. –
Cosa succede se il metodo statico legge un file di configurazione che guida la mia applicazione? è probabile che voglia prendere in giro questo comportamento. Pensaci: vuoi fare test funzionali ma non vuoi diventare una "fabbrica di configurazione". se fosse un singleton allora posso più facilmente deridere quel metodo e guidare il mio test dal codice. Tuttavia, con PowerMock è possibile simulare anche metodi statici. – uthomas
Potrebbe essere un over-engineering, ma renderlo un bean che può essere iniettato rende più semplice il test unitario delle classi dipendenti. Renderebbe ancora più semplice testare se avesse implementato un'interfaccia. – Behrang