标签:Spring 代码 编程 pattern AOP execution type
0.前言
这篇文章是我看完书做的笔记.
如果有哪位朋友正巧看到这篇文章,记得先跟着手头的资料敲一遍,再回过头来看,会比较明白.
很多编程的东西都是看半天不如敲一遍,来得理解的快,AOP这块内容就是一个很好的例子.
一定要多动手实践.
1.什么是AOP
- AOP,Aspect-Oriented Programming,面向切面编程,是OOP面向对象编程的一种补充,也是如今一种比较成熟的编程方式.
- AOP解决了业务代码中事务,日志的代码复用问题,降低了工作量和出错率
- AOP思想采用的是一种横向抽取机制,将分散到各个方法中重用的代码抽取处理,然后在程序编译或运行时将其应用到需要的地方.
- 传统OOP是无法办到的(OOP只能实现父子类关系的纵向重用)
- 目前最主流也是Spring使用的AOP框架是AspectJ,所以我们也将用它来开发.
2.AOP术语
- Aspect:用于横向插入的功能类(通常是事务,日志)
- Joinpoint:程序执行过程中的某个阶段点,它实际上是对象的一个操作,例如方法的调用或异常的抛出.在SpringAOP中,连接点就是指方法的调用
- Pointcut:切面与程序流程的交叉点,即那些需要处理的连接点.
- Advice:AOP框架在特定的切入点执行增强处理,即在定义好的切入点处所要执行的程序代码.
- TargetObject:被通知/增强的对象
- Proxy:将通知应用到目标对象后,被动态创建的对象
- Weaving:将切面代码插入目标对象,从而生成代理对象的过程
3.pointcut expression
- 标准格式:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)
- 带?号的(modifiers-pattern=>目标方法的修饰符,declaring-type-pattern,thoeows-pattern)是可选配置项
- 例子:
execution(* tech.rpish.dao.*.*(..))
execution()
是表达式的主体*
第一个星号是ret-type 返回类型tech.rpish
是包名*
包名后的星是类名 (包名和类名共同组成declaring-type=>定义目标方法的类路径)*
类名后的星是方法名 =>被代理的目标方法..
是param,参数*
和..
都是通配符,表示所有的意思
4.通知类型
- Before
- After
- Around
- AfterReturing
- AfterThrowing
5.两种实现方式
使用AspectJ进行AOP编程同样有基于xml和注解两种方式.
我已经把项目上传到github,就不一个个文件贴代码了,有兴趣可以到github看我写的demo.
SSM-bootstrap/MyAOP at master · rpishgithub/SSM-bootstrap
标签:Spring,代码,编程,pattern,AOP,execution,type 来源: https://www.cnblogs.com/rpish/p/15233779.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。