@aspect
public class aspect
{
@before(execution(* com.test.*.*(..)))
public void logbefore(joinpoint joinpoint)
{
logenter.....
}
@after(execution(* com.test.*.*(..)))
public void logafter(joinpoint joinpoint)
{
logexit.....
}
}
spring config:
<aop:aspectj-autoproxy/>
<bean id="aspect" class="com.test.aspect"></bean>
最近开发了一个项目,由于项目在整个开发过程中处于赶时间状态(每个项目都差不多如此)所以项目在收尾阶段发现缺少记录系统日志功能,以前系统都是直接写在每个模块的代码中,然后存入表单,在页面可以查看部分日志。这个系统并没有此要求,因此便想到了做一个系统通用的日志记录,主要记录数据有:操作时间、操作对象、操作方法、操作的一些参数以及操作结果。刚开始直接想到的是利用aspect实现aop记录日志,但实际应用中发现aspect并不能友好的拦截action,而是主要用作拦截service层业务。由于系统框架是基于ssh框架的,所以最终考虑使用struts2的自带拦截器interceptor。
什么拦截器?
拦截器是动态拦截action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。谈到拦截器,还有一个词大家应该知道——拦截器链(interceptor chain,在struts 2中称为拦截器栈interceptor stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
拦截器的原理和大致流程
1.actioninvocation初始化时,根据配置,加载action相关的所有interc eptor。
2. 通过actioninvocation.invoke方法调用action实现时,执行interceptor。
interceptor将很多功能从我们的action中独立出来,大量减少了我们action的代码,独立出来的行为具有很好的重用性。xwork、webwork的许多功能都是有interceptor实现,可以在配置文件中组装action用到的interceptor,它会按照你指定的顺序,在action执行前后运行。
以上就是详解用aspect实现方法出入口日志记录的经验分享的详细内容。