2013-11-27 128 views
0

我有一個JSF2應用程序使用Spring的事務,安全和DI容器。
應用程序有3層:
1. JSF視圖+ JSF管Bean
2.服務類
3. DAO類
因此,一個要求是這樣的:
JSF頁面 - > JSF MB - >服務類 - > DAO類 - >數據庫,反過來。
我的問題是,有服務方法後,執行他們的業務必須登錄到數據庫的事件。
例如,當某人激活/停用用戶時。我想記錄此操作以及用戶標識。
所以,我只看到兩種方法在這裏:(我真的相信還有更多)
1.這種方法我確定登錄的用戶和執行實際的記錄
裏面 - 我的缺點在這裏我會看到這樣的事實由於從SpringSecurity挑選的userId
2.使用SpringAOP,此方法將不太容易測試。這種方式是非侵入式的,這很酷,但是對於一種方法我會有一個方面,但效率不高。jsf 2彈簧應用程序日誌記錄特定事件

我想知道你們是否有這種問題,如果是的話,你是如何解決這些問題的?

+0

我在我的內置系統類似的情況。我們只是將登錄用戶保存在會話範圍的bean中。當用戶執行任何更改DB狀態的操作時,將完成記錄器表上的更新操作。其實我們每次執行每個操作後都會手動調用它。可以使用Spring AOP以更優雅的方式完成?可能讓容器管理我們感興趣的每個方法調用,並在每次更新數據庫時調用記錄器方法。 –

回答

0

考慮引入標記註釋。我們稱之爲:@LogEvent。然後註釋你想攔截的每個方法。通過這種方式,您可以實現一個單一的方面,其中的建議不僅與命名約定相匹配,而且與@LogEvent的存在相匹配。

類似:

@After("execution(@LogEvent * *.*(..))") 
相關問題