栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

浅谈个人理解Aop

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浅谈个人理解Aop

面试必然会问到的经典题目;我也不说多的,就代码的使用和简单的理解,因为基本上就是这样,很多时候项目搭建的时候架构师就已经写好了。

Aop,首先是是使用场景,最经典的日志记录,然后是运行统计、事务管理、缓存优化等等。

作用就是,把代码里面的需要重复写的、耦合性比较高的、具有横向扩展的代码抽取出来,简单说就是把某些代码抽取出来独立运行。在我们的接口方法之前、或者之后走一遍切面,这样我有需求改动代码就只用改动切面类的代码就可以了。

切面组成部分,分为三个部分。切面类、切点、通知。

下图所示:

 1、定义一个切面类这个就不需要多说了。加上@Aspect 和 @Component 注解就是一个切面类。

 2、定义切点,@Pointcut("

(execution(* cn.hsa.pss.cw.service.*.*ServiceImpl.*(..)) || execution(* cn.hsa.pss.cw.service.*.*.*ServiceImpl.*(..))) &&!execution(* cn.hsa.pss.cw.service.impl.BusinessConfigServiceImpl.queryBusinessConfigByPKAdmdvs(..))

")

这个表达式的意思就是对这个,所有包路径下的,所有子包、所有ServiceImpl结尾的实现类、里面的所有方法和方法的所有参数作为切面目标。可以或者连接两个切点条件,也可以对具体的模块的类的方法不进行切面方法的执行。切点下的方法名可以自定义。

3.通知,这个比较重要,涉及到五个通知注解,浅浅解释一波。

        1)、@Before(),在我们的接口方法执行之前,先走我们的定义好的切面通知方法,执行顺序,1.切面类的doBefore()。2.我们的自己写的接口方法。

        2)、@After(),先执行我们的写的接口,执行完毕之后走切面类的的doAfter(),抛出异常或者执行完我们自己的接口方法之后执行。

        3)、@AfterReturning(),和2)的区别就是在我们的接口正常执行之后走我们的通知方法。

        4)、@AfterThrowing(),和2)的区别就是在我们@的接口抛出异常之后走切面里面的通知方法。

        5)、@Around(),包含了前面四个通知的特点,在我们自己定义的接口之前先走一遍,环绕通知方法,相当before()。我们的接口执行完之后,再走一边环绕通知方法,相当After()。

然后我们都知道,jdk动态代理是接口的重写(适用于实现接口的类,spring aop的默认实现),实现类实现了接口。我们平常项目写接口的时候都懂。另一种就是,如果没有接口只有类就是通过Cglib来实现,cglib动态代理是类的继承。

学习总结:比较建议结合项目和百度去看,自己再跟着写一个小Demo,就会学的比较快,自己理解了,就能说出来了。也不会轻易忘记。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027451.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号