Spring AOP拦截Struts1记录操作日志

目录

  • 前言
  • BeanNameAutoProxyCreator 自动代理实现
  • AOP标签之Aspect实现
  • 继承DelegatingRequestProcessor  (非AOP实现)

[一]、前言

一个N年前的SSH(Spring2.0.3+Struts1+Hibernate3)框架的项目,需要增加一个记录系统操作日志的功能,这时自然而然想到利用Spring的AOP特性来实现,但在实际实现过程中还是遇到了不小的问题,本文主要是记录这些问题的解决办法和不同实现方法的使用场景及其优缺点。

实例演示中:LonginAction 继承 Action  ,UserAccountMainAction 继承 DispatchAction

[二]、BeanNameAutoProxyCreator 自动代理实现

1.适用场景

  • Spring 配置文件中命名规范的配置简单,否则很麻烦
  • 对于继承Struts1的Action、DispatchAction 的类都可以拦截成功
  • 过滤规则单一(不能根据package、方法名、参数 等自定义过滤)

2.实例演示

LoggerBeforeAdvice.java 需要实现Advice接口

直接继承Action的日志记录如下:

继承DispachAction的日志记录如下:

[二]、AOP标签之Aspect实现

1.适用场景

  • 拦截表达式灵活,可以根据package、方法、参数、返回值 等等进行过滤
  • 对于Struts1的Action继承类可以拦截,但是继承DispatchAction的类拦截失败(解决办法是:继承DispatchAction的类需要重写下 父类的 execute 方法才能被拦截),这个原因是因为:如果是通过反射技术调用的方法是不能被拦截到,否则就可以被拦截,而DispatchAction 正是通过反射来调用具体方法的。

2.实例演示

LoggerAopBefore.java 无需实现接口

所有 DispatchAction的实现类需要重写父类的 execute 方法:

直接继承Action的日志记录如下:

继承DispachAction的日志记录如下:

[四]、继承DelegatingRequestProcessor (非AOP实现)

struts-config.xml  配置文件中增加:

ExtDelegatingRequestProcessor.java

Action 和DispatchAction 的 操作日志如下:

本文介绍到此介绍。

—————–  EOF @Michael Sun —————–

原创文章,转载请注明: 转载自micmiu – 软件开发+生活点滴[ http://www.micmiu.com/ ]

本文链接地址: http://www.micmiu.com/j2ee/spring/spring-aop-struts1-action/

发表评论?

2 条评论。

  1. 你那有简单的案例么?能否给一下

  2. 我这样配过之后,并没有起到作用 😥

回复给 楚士伟 ¬
取消回复


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">