一步一步学习spring(七)——采用声明方式实现AOP的例子
上篇博客中描述了一个采用注解形式实现spring中AOP的例子,下面向大家展示一下采用
spring中声明的方式实现Spring AOP的实例。
采用注解实现的,大家可参考该blog:
http://xtu-xiaoxin.iteye.com/blog/630206
先向大家声明,该篇博客只是给新手一个关于AOP的例子,以及方便我以后对注解实现AOP和声明实现AOP作对比,请大家原谅我贴出这种陈词滥调的东西。废话不说了,我先向大家描述该
示例。
CommonEmployee.java和注解AOP中的类一样,没有变化,也就是说目标对象是不变的,
具体想要了解该类详细代码,请看上篇blog。
通知类发生了一点小改变,具体通知类Logger.java如下:
package com.aop;import java.util.Date;import org.aspectj.lang.ProceedingJoinPoint;public class Logger{ //spring中Before通知public void logBefore() {System.out.println("logBefore:现在时间是:"+new Date());}//spring中After通知public void logAfter() {System.out.println("logAfter:现在时间是:"+new Date());}//spring中Around通知public Object logAround(ProceedingJoinPoint joinPoint) {System.out.println("logAround开始:现在时间是:"+new Date()); //方法执行前的代理处理Object[] args = joinPoint.getArgs();Object obj = null;try {obj = joinPoint.proceed(args);} catch (Throwable e) {e.printStackTrace();}System.out.println("logAround结束:现在时间是:"+new Date()); //方法执行后的代理处理return obj;}}可以看见,上面的通知类没有引入注解了。所以,要想在spring中使用没有注解的通知类,
则必须在spring配置文件中作如下配置:
<bean id="employee" value="good"></property> </bean> <bean id="advice" /> <aop:config > <aop:aspect ref="advice"> <aop:pointcut id="pointcut" expression="execution(* com.aop.CommonEmployee.sign*(..))"/> <aop:before method="logBefore" pointcut-ref="pointcut"/> <aop:after method="logAfter" pointcut-ref="pointcut"/> <aop:around method="logAround" pointcut-ref="pointcut"/> </aop:aspect> </aop:config>
最后,测试类Test.java代码已在上篇博文中贴出,详细请看:
http://xtu-xiaoxin.iteye.com/blog/630206
最后得出测试结果如下:
logBefore:现在时间是:Fri Apr 02 14:44:37 CST 2010
logAround开始:现在时间是:Fri Apr 02 14:44:37 CST 2010
good已经签到了...........
logAfter:现在时间是:Fri Apr 02 14:44:37 CST 2010
logAround结束:现在时间是:Fri Apr 02 14:44:37 CST 2010
这是个比较简单常见的实例,对Spring AOP入门的新手来说,我觉得还是有点帮助的,最后
我将整理下注解实现AOP以及声明实现AOP直接的一些适用场景,以巩固一下自己的知识。 1 楼 kidd3166 2010-04-06 写是写了喇,不知道如何获取切割方法的参数呢 2 楼 XTU_xiaoxin 2010-04-07 Object[] args = joinPoint.getArgs(); kidd3166 写道写是写了喇,不知道如何获取切割方法的参数呢
文章的around通知有描述,即通过 “Object[] args = joinPoint.getArgs(); "形式获得方法参数