AOP的基本概念:
什么是AOP:
AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。
在不改变原有的逻辑的基础上,增加一些额外的功能。代理也是这个功能,读写分离也能用aop来做。
AOP的相关概念:
横切关注点:对哪些方法进行拦截,拦截后如何处理,这些关注点成为横切关注点
Aspect(切面):通常是一个类,里面定义切入点和通知
JoinPoint(连接点):程序执行过程中明确的点,一般是方法的调用。被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中拦截到的点只是方法,实际上还是可以拦截到字段或者构造器的。
Advice(通知):AOP在特定切入点上执行的增强处理,有五个通知类型:前置、后置、最终、异常和环绕
PointCut(切入点):就是需要被增强的地方
weave(织入):将切面应用到目标对象并导致代理对象创建的过程
AOP使用场景:
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务
ProceedingJoinPoint和JoinPoint
ProceedingJoinPoint的 proceed方法的作用:执行目标方法,或者说是去调用了目标方法,得到目标方法的返回值。
环绕通知 ProceedingJoinPoint 执行proceed方法的作用是让目标方法执行,这也是环绕通知和前置、后置通知方法的一个最大区别。
Proceedingjoinpoint 继承了 JoinPoint 。是在JoinPoint的基础上暴露出 proceed 这个方法。proceed很重要,这个是aop代理链执行的方法。