2013-11-27 89 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 * *.*(..))") 
相关问题