`
morgan117
  • 浏览: 4151 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Spring AspectJ

阅读更多
Spring AOP的配置是较为复杂的。所以Spring引入了AspectJ,来定义切面。
切面是由切点(PointCut)和增强(Advice)组成的。 @AspectJ使用了JDK5.0中的注解技术,简化了Spring AOP的配置。
增强类型:
1. @Before
   与MethodBeforeAdvice相对应,即在方法执行前织入代码
2. @AfterReturning
   与AfterReturningAdvice相对应,即在方法执行后织入代码
3. @After
   没有对应的Advice, 在方法执行完后或者抛出异常后织入代码,跟finally类似
4. @Around
   与@MethodInterceptor相对应,在方法执行前后织入代码,可以在增强方法(织入代码)中传入参数ProceedingJoinPoint, 执行其proceed() 执行target的方法。
5. @AfterThrowing
   与ThrowsAdvice对应,在抛出异常后织入代码。
6. @DeclareParents
   与IntroductionAdvice对应,可以通过defaultImpl,继承某个子类,实现添加新的属性和方法。

切点表达式函数:
1. 方法切点函数:
execution(): 参数: 方法匹配模式。 匹配方法名符合上述模式的方法
annotation(): 参数: 标注类。 匹配所有标注了该标注的方法

2. 方法参数切点函数:
args(): 参数: 方法参数的类型。匹配所有参数类型为该类型的方法
@args(): 参数: 含标注的方法。 匹配所有参数类含该标注的方法

3. 类切点函数
within() 参数:类名匹配模式。 匹配所有类名符合上述模式的类
target() 参数:类名。 匹配该类以及其父类
@within() 参数: 标注类。 匹配所有含有有该标注的类及其父类
@target() 参数: 标注类。 匹配所有含有该标注的类
@this() 参数:类名。跟@target基本相同,区别在于引介切面时,同样织入引介产生的方法。

通配符:
和正则表达式的通配符不同:
* 匹配任意字符,但只能匹配上下文中的一个元素
.. 匹配任意字符,可以匹配上下文中多个元素,在表示类时,必须和*连用,而在表示入参时单独使用
+ 匹配指定类以及其父类

注意: 以@(@within,@target,@this)开头的切点表达式不支持通配符

在使用JDK5.0以下的jdk时,不能使用注解,这时候spring 还提供了xml的方式。
<aop:aspect>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics