教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

AOP(Aspect Orient Programming)面向切面编程(2)

来源:网络收集 时间:2026-09-11
导读: 3.5 After 增强处理: After 与 AfterReturning 的区别: After : 增强处理不管目标方法如何结束,他都会被织入。因此,After 增强处理必须准备处理正常返回和异常返回两种情况,这种增强处理通常用于释放资源。 A

3.5 After 增强处理:

After 与 AfterReturning 的区别:

After : 增强处理不管目标方法如何结束,他都会被织入。因此,After 增强处理必须准备处理正常返回和异常返回两种情况,这种增强处理通常用于释放资源。

AfterReturning : 增强处理只有在目标方法成功完成才会被织入。

如下:

package org.advice.After;

import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.After; @Aspect

public class AfterAdviceTest {

@After (\

public void release() {

System.out.println(\模拟方法结束后的释放资源....\ } }

3.6 Around 增强处理 :

Around 增强处理既可以在执行目标方法之前织入增强处理,可以在执行目标方法之后织入增强动作。同时,Around 增强处理甚至可以决定目标方法在什么时候执行,如何执行,甚至可以完全阻止目标方法的执行。

Around 增强处理可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值。

当定义一个 Around 增强处理方法时,该方法的第一个形参必须是 ProceedingJoinPoint 类型,调用 ProceedingJoinPoint 的 proceed() 方法才会执行目标方法。

如下:

package org.advice.Around;

import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; @Aspect

public class AroundAdviceTest {

@Around ( \

public void processText(ProceedingJoinPoint PJ) throws Throwable {

System.out.println(\执行目标方法之前,模拟开始事务。\ PJ.proceed() ;

System.out.println(\执行目标方法之后,模拟结束事务。\ } }

3.7 访问目标方法的参数:

访问目标方法的做法是定义增强处理时将第一个参数定义为JoinPoint 类型,当该增强处理方法被调用时,该JoinPoint 参数就代表了织入增强处理的连接点。该JoinPoint 里包含了如下常用的方法:

> Object[] getArgs() : 返回执行目标方法时的参数。

> Signature getSignature() : 返回被增强的方法的相关信息。

> Object getTarget() : 返回被织入增强处理的目标对象。 > Object getThis() : 返回AOP框架为目标的相关信息。 注意:ProceedingJoinPoint 该类是JoinPoint 的子类。

3.8 定义切入点:

为一个切入表达式起一个名称,从而允许在多个增强处理中重用该名称。Spring AOP 只支持以Spring Bean 的方法执行组 作为连接点,所以可以把切入点看错所有能和切入表达式匹配的Bean 方法。

切入点定义包含两个部分:

> 一个切入点表达式。

> 一个包含名字和任意参数的方法签名。

如下:

package org.advice.AfterReturning;

import org.aspectj.lang.annotation.*;

@Aspect

public class adviceExpression {

@Pointcut(\ public void test() { }

} 注意:上面代码中的 test方法的返回值必须是void , 且当用private 访问控制符修饰时,则仅能在切面类中使用该切入点。

package org.advice.AfterReturning;

import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; @Aspect

public class AfterReturningAdivceTest { @AfterReturning( returning = \

pointcut = \ public void log(Object rvt) {

System.out.println(\获取目标方法返回值:\ System.out.println(\模拟记录日志功能...\ } }

3.9 切入点指示符

Spring AOP 仅仅支持部分 Aspect J 的切入指示符。

Spring AOP 支持的切入点指示符有:

> exection : 用于匹配执行方法的连接点,

> within : 限定匹配特定类型的连接点,当使用Spring AOP 的时候,只能匹配方法执行的连接点。

如下:

within(org.service.imp.*) // imp 包中的任意连接点

within(org.service.imp..*) // imp 包或子包中的任意连接点

> this : 用于限定AOP 代理必须是指定类型的实例,用于匹配该对象的所有连接点。当使用Spring AOP 的时候,只能匹配方法执行的连接点。

> target : 用于限定目标对象必须是指定类型的实例,用于匹配该对象的所有连接点。当使用Spring AOP 的时候,只能匹配方法执行的连接点。

如下:

// 匹配实现了Person 接口的目标对象的所有连接

// 在Spring AOP 中只是方法执行的连接点

target(org.service.imp.Person)

> args : 用于对限定目标参数类型的限定,要求参数类型是指定类型的实例。当使用Spring AOP 的时候,只能匹配方法执行的连接点。

Spring 支持使用如下路基运算符来组合切入点表达式。

> !! : 只要连接点匹配任意一个切入点表达式。

> && :

> ! : 要求连接点不匹配指定切入点表达式。 …… 此处隐藏:792字,全部文档内容请下载后查看。喜欢就下载吧 ……

AOP(Aspect Orient Programming)面向切面编程(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/604792.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)