Questo è un progetto Spring MVC con Hibernate. Sto cercando di fare una classe Logger che è responsabile per l'inserimento dei log nel database. Altre classi chiamano solo i metodi corretti con alcuni attributi e questa classe dovrebbe fare tutta la magia. Per sua natura dovrebbe essere una classe con metodi statici, ma che causa problemi con l'oggetto dao di autowiering.@autowired nelle classi statiche
public class StatisticLogger {
@Autowired
static Dao dao;
public static void AddLoginEvent(LogStatisticBean user){
//TODO code it god damn it
}
public static void AddDocumentEvent(LogStatisticBean user, Document document, DocumentActionFlags actionPerformed){
//TODO code it god damn it
}
public static void addErrorLog(Exception e, String page, HashMap<String, Object> parameters){
ExceptionLogBean elb=new ExceptionLogBean();
elb.setStuntDescription(e);
elb.setSourcePage(page);
elb.setParameters(parameters);
if(dao!=null){ //BUT DAO IS NULL
dao.saveOrUpdateEntity(elb);
}
}
Come fare bene? Cosa devo fare per non rendere nullo l'oggetto dao? So che potrei passarlo come parametro di metodo, ma non è molto buono. Suppongo che il lavoro automatico non possa funzionare su oggetti statici, perché sono stati creati per il meccanismo di autowiering non ancora creato.
Interessante trucco. Lo terrò a mente per il futuro :) –
Il tipo di reso del metodo DEVE essere annullato. http://docs.oracle.com/javaee/5/api/javax/annotation/PostConstruct.html –
Molto tempo dopo la battaglia, sono arrivato a utilizzare questa soluzione che funziona per la maggior parte. Ma la compagnia Sonar mi ha subito avvertito: "L'aggiornamento corretto di un campo statico da un metodo non statico è difficile da ottenere e potrebbe facilmente portare a bug se ci sono più istanze di classe e/o più thread in gioco. Idealmente, i campi statici vengono aggiornati solo da metodi statici sincronizzati. Ho pensato che sarebbe stato degno di menzione. – MaxouMask