面向切面编程

面向切面编程
散布于应用中多处的功能被称为横切关注点
常用于安全、事务、日志、缓存

优点:切面方法集中在一起,方便管理
开发人员更多的关注业务代码

spring目前仅支持方法级别的连接点

关键字解释:
1、通知:切面执行的东西,有前置、后置、环绕、返回、异常通知
2、切点:缩小切面所通知的连接点的范围(例如只对service层做事务处理)
3、连接点:应用中数以千计的时机应用通知(例如;一个方法)
4、切面:切面是通知和切点的结合
5、织入:把切面应用到目标对象,并创建代理的过程
编译时织入:AspectJ
类加载时织入:LTW
运行时织入:spring AOP

通过切点来选择连接点
AspectJ指示器
execution(常用)、within、arg、this()、target
举例:execution(public * com.bigData.farm.service.UserService.login(…))
userService类中的login方法任意参数,任意返回值

复合运用:execution(public * com.bigData.farm.service.UserService.login(…))
&& within(com.bigData.farm.*)
标示仅仅织入farm包下的东西
常用连接符:&& 、||、! 在java xml 配置文件中用and,or,not标示

__________________________________________________________________________________
  1. @Aspect 创建切面
  2. @Before切入之前执行
  3. @AfterReturning
  4. @PointCut 切入点,可以随意加载自定义方法上,空方法也可以,仅仅是个标志
  5. @After 后置通知
  6. @AfterThrowabling 异常通知
  7. @Around 环绕通知

1、如何将@Aspect 注解的类视为切面,在javaconfig中增加注解@EnableAspectAutoProxy启动代理功能
2、Around方法接收参数例子

public void watch(ProceedingJoinPoint jp){
       “先执行的部分”;
       jp.proceed();
       "后执行的部分";
}

注意:不执行proceed()方法,执行切入点时会被阻塞,即不会执行目标方法。


处理通知中的参数
1、eg:记录录音播放的次数
2、带参数的切入点
3、@PointCut(“execution( * * soundSystem.CompactDisc.playTrack(int) )” + “&& args(trackNumber)”)
args 给通知方法的参数
playTrack(int) 通知方法和参数类型
trackNumber 定义参数 的名称
Map<trackNumber,count>


xml的配置
aop:config
<aop:aspect ref=“ddd”>
<aop:before pointcut="" method="">

环绕通知:入记录表演用时多久,
xml声明环绕通知,切面方法要有参数,(proceedingJoinPoint ip)

注入aspectj的切面,aspectj有更强大的功能,不仅仅局限于方法。相比spring aop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值