Spring AOP

                                                                
编程范式概览:
1面向对象编程 2面向过程编程 3函数式编程  4事件驱动编程 5面向切面编程
2是OOP的互补而不是替代

AOP初衷:
1不要重复
2关注点分离:
水平分离:展示层->服务层->持久层
垂直分离:模块划分(订单.库存等)
切面分离:分离功能性需求和非功能性需求->把非功能性需求从功能性需求剥离出来进行集中管理

使用AOP好处:
1集中处理某一关注点,横切逻辑
2可以很方便的添加/删除关注点
3侵入性小,增强代码可读性和可维护性

AOP应用场景:-----统一称为非功能性需求
权限控制     缓存控制    事务控制   审计日志   性能监控   分布式追踪    异常处理

支持AOP的编程语言:
JAVA    .NET   C/C++  RUBY   Python    PHP  ...

Spring AOP配置:1XML配置   2注解方式
主要注解:AspectJ:@Aspect类上(@Pointcut/@Before/@After:方法上/@Advice表示执行之前和之后执行)

Pointcut expression:
expression:1designators:匹配方式  2wildcards通配符:* ..+ 3operators运算符:&&  || !

designators:决定了匹配方式
1匹配方法->execution()
2匹配注解->@target()/@args()/@within()/@annotation()
3匹配包/类型:within()
4匹配对象:this()/bean()/target()
5args()

Wildcards(通配符):
*:匹配任意数量的字符     +匹配指定类及其子类    ..一般用于匹配任意数的子包或者参数

operators运算符:
&&:与运算符   ||或操作符     !非操作符


AOP用的比较少,主要是通过吧非功能性需求从功能性需求中剥离出来,从而达到解耦的目的,重要的是他的思想,并且面试比较多,

工作中实际使用比较少,所以我还是不学了



原文地址:https://www.cnblogs.com/xinglongbing521/p/10396521.html