1
public class Auditing extends EmptyInterceptor {

    @Resource
    private ApplicationService applicationService;

    public boolean onFlushDirty(Object entity, Serializable id,Object[] currentState,   Object[] previousState, String[] propertyNames, Type[] types) {   
        if(applicationService == null){
            System.out.println("applicationService is null");
        }

        return(true);
    }

}

Hibernateアクションごとに、新しいAuditingオブジェクトが作成され、onFlushDirty()で常に「applicationServiceisnull」と出力されていることを確認しました。

EmptyInterceptorでApplicationServiceを利用できるようにする方法を教えてもらえますか?

4

2 に答える 2

0

静的なapplicationServiceプロパティを持つクラスを作成することで、この回避策を見つけました。これで、静的参照を作成することで、applicationServiceを使用できます。

今のところ機能しています..もしあれば、より良いまたは効率的な提案を投稿してください:)

よろしく、

于 2013-04-03T14:59:24.013 に答える
0

ApplicationContextAwareインターフェースを実装することにより、アプリケーションコンテキストオブジェクトを使用してクラスを作成できます。

public class ApplicationContextProvider implements ApplicationContextAware {
    private static ApplicationContext context;

    public static ApplicationContext getApplicationContext() {
        return context;
    }

    @Override
    public void setApplicationContext(ApplicationContext ctx) {
        context = ctx;
    }
}

これで、以下のコードを使用してBeanを取得できます。

applicationService = (ApplicationService ) ApplicationContextProvider.getApplicationContext().getBean("applicationService")

上記のコードは、将来的に他のBeanを取得するために使用でき、静的Beanを追加し続ける必要はありません。

于 2018-06-07T07:10:28.017 に答える