编程范式概览:
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用的比较少,主要是通过吧非功能性需求从功能性需求中剥离出来,从而达到解耦的目的,重要的是他的思想,并且面试比较多,
工作中实际使用比较少,所以我还是不学了