これはHibernateを使用したSpring MVCプロジェクトです。 私は、データベースへのログの入力を担当するLoggerクラスを作成しようとしています。 他のクラスは、いくつかの属性を持つ適切なメソッドを呼び出すだけで、このクラスはすべての魔法を実行する必要があります。 性質上、静的メソッドを持つクラスである必要がありますが、autowiering DAOオブジェクトで問題が発生します。静的クラスでの自動入力
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);
}
}
正しく行うには? DAOオブジェクトをnullにしないためにはどうすればよいですか? メソッドのパラメータとして渡すことができますが、あまり良くありません。 私はautowieringメカニズムがまだ作成されていないために作成されているので、autowiredは静的オブジェクトでは動作しないと推測しています。
興味深いありがとうトリック。私は将来を考えています:) –
メソッドの戻り値の型は無効でなければなりません。 http://docs.oracle.com/javaee/5/api/javax/annotation/PostConstruct.html –
戦闘の後、私は大部分の場合に機能するこのソリューションを使用するようになりました。しかし、Sonar社はすぐに私に警告してくれました。「非静的メソッドから静的フィールドを正しく更新するのは難しいです。複数のクラスインスタンスや複数のスレッドがある場合、バグにつながる可能性があります。理想的には、静的フィールドは同期された静的メソッドからのみ更新されます.'私はそれに言及する価値があると思いました。 – MaxouMask