SpringAOP实例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringAOP实例相关的知识,希望对你有一定的参考价值。
Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明。
1 启用对@AspectJ的支持
Spring默认不支持@AspectJ风格的切面声明,为了支持需要使用如下配置:
<!-- 开启支持@AspectJ风格的切面声明 -->
<aop:aspectj-autoproxy/></span>
这样Spring就能发现@AspectJ风格的切面并且将切面应用到目标对象。
2 声明切面
@AspectJ风格的声明切面非常简单,使用@Aspect注解进行声明:
/定义切面 @Aspect() public class LoggerAspect { //定义切入点 @Pointcut(value="execution(* zmx.spring.aop.test..*.*(..)) && args(param)", argNames = "param") public void beforePointcut(String param) {} @Pointcut(value="execution(* zmx.spring.aop.test..*.*(..))") public void afterPointcut(){} //定义通知 //前置日志通知 @Before(value = "beforePointcut(param)", argNames = "param") public void beforeAdvice(String param) { System.out.println("===========before advice param:" + param); } //后置日志通知 @After(value = "afterPointcut()") public void afterAdvice() { System.out.println("===========after advice param"); } }
然后将该切面在配置文件中声明为Bean后,Spring就能自动识别并进行AOP方面的配置:
<!-- 切面 -->
<bean id="loggerAspect" class="zmx.spring.aop.test.LoggerAspect" />
3 声明切入点
@AspectJ风格的命名切入点使用org.aspectj.lang.annotation包下的@Pointcut+方法(方法必须是返回void类型)实现。
@Pointcut(value="切入点表达式", argNames = "参数名列表")
public void pointcutName(……) {}
value:指定切入点表达式;
argNames:指定命名切入点方法参数列表参数名字,可以有多个用“,”分隔,这些参数将传递给通知方法同名的参数,
同时比如切入点表达式“args(param)”将匹配参数类型为命名切入点方法同名参数指定的参数类型。
pointcutName:切入点名字,可以使用该名字进行引用该切入点表达式。
定义了一个切入点,名字为“beforePointcut”,该切入点将匹配目标方法的第一个参数类型为通知方法实现中参数名为“param”的参数类型。
4 声明通知
@AspectJ风格的声明通知也支持5种通知类型:
一、前置通知:使用org.aspectj.lang.annotation 包下的@Before注解声明;
@Before(value = "切入点表达式或命名切入点", argNames = "参数列表参数名")
value:指定切入点表达式或命名切入点;
argNames:与Schema方式配置中的同义。
以上是关于SpringAOP实例的主要内容,如果未能解决你的问题,请参考以下文章
SpringAOP的xml实例注解形式实例概念理解 以及execution表达式实例与概念说明
Ehcache学习ehcache与springAOP拦截器实例