32

これは、Hibernateを使用したSpringMVCプロジェクトです。私は、データベースへのログの入力を担当するLoggerクラスを作成しようとしています。他のクラスは、いくつかの属性を持つ適切なメソッドを呼び出すだけで、このクラスはすべての魔法を実行する必要があります。本来、静的メソッドを持つクラスである必要がありますが、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にしないようにするにはどうすればよいですか?メソッドパラメータとして渡すことができることは知っていますが、それはあまり良くありません。静的オブジェクトは初期段階で作成されているため、自動配線メカニズムはまだ作成されていないため、autowiredは静的オブジェクトでは機能しないと思います。

4

4 に答える 4

22

静的クラスは Bean ではないため、Spring で管理できないため、従来の自動配線はおそらく機能しません。たとえば、 XMLでアプローチを使用factory-methodたり、静的初期化ブロックで Spring コンテキストから Bean をロードしたりすることによって、これを回避する方法がありますが、私が提案したいのは、設計を変更することです。

静的メソッドを使用しないでください。必要な場所に注入するサービスを使用してください。Spring を使用している場合は、正しく使用することもできます。依存性注入はオブジェクト指向の手法であり、実際に OOP を採用した場合にのみ意味があります。

于 2012-07-09T09:57:44.103 に答える