概念
- OOP(Object Oriented Programming)面向对象程序设计
个人理解:将现实事物抽象为对象,由属性(事物状态)与方法(事物行为)组成。对象即可以表示猫亦可表示人,对象间通过消息传递相互通信,来模拟现实世界中不同事物的联系。
特性:封装(以对象作为最小单元)、继承(复制上层对象作为自身对象的一部分)、多态(同族对象具备相同行为但行为的结果不同) - AOP(Aspect Oriented Programming)面向切面程序设计
个人理解:将OOP抽象后的对象组按照某个维度再次抽象,形成切面对象。
使用场景:权限校验、事务处理、日志记录
AOP组织
AOP Alliance项目是几个对AOP和Java感兴趣的软件工程人员之间的联合开源项目(http://aopalliance.sourceforge.net/)
AOP实现
- 编译期实现
- AspectJ (TM): 使用专门的Java编译器实现
- 运行期实现
- Spring AOP:基于动态代理(jdk的动态代理或者cglib的动态代理)实现
Spring AOP
-
部分AOP Alliance接口(Spring中可以使用任何AOP Alliance MethodInterceptor)
1.部分AOP Alliance接口 1588434318(1).png
- 接口说明
- Joinpoint(连接点):运行时连接点表示在连接点上发生的事件()
- Invocation:表示程序中的调用(运行时的连接点)
- Advice(通知):当连接点上事件被触发时的处理逻辑
- Interceptor:表示通用拦截器
- 接口关系 屏幕截图 2020-05-02 10.42.40.png
- 使用案例
class DebuggingInterceptor implements MethodInterceptor, ConstructorInterceptor { Object invoke(MethodInvocation i) throws Throwable { debug(i.getMethod(), i.getThis(), i.getArgs()); return i.proceed(); } Object construct(ConstructorInvocation i) throws Throwable { debug(i.getConstructor(), i.getThis(), i.getArgs()); return i.proceed(); } void debug(AccessibleObject ao, Object this, Object value) { ... } }
- 接口说明
- Spring AOP接口(基于AOP Alliance扩展接口)
- 扩展内容:
- Introduction support:org.springframework.aop.IntroductionInfo(支持在被代理对象中新增行为)
- A Pointcut abstraction:org.springframework.aop.Pointcut(提供连接点过滤条件的接口,支持类过滤与方法(包括方法参数)过滤)
- A full range of advice types, including around, before, after returning and throws advice(支持更多Advice类型)
- 高扩展:支持在不修改核心框架的情况下插入任意自定义Advice类型
- 接口说明
- IntroductionInfo:定义在被代理对象新增行为的集合
- MethodMatcher:检查目标方法是否能被通知(属于Pointcut一部分)
- ClassFilter:检查目标类是否能被通知
- Pointcut:通过MethodMatcher与ClassFilter过滤连接点,形成切面范围
- Advisor:包含Advice与过滤Joinpoint的过滤器(如:pointcut)的组合
- TargetSource:用于获取当前被代理的对象
- SpringProxy:由Spring生成代理的标识
- 接口关系 aopspring.jpg
- 扩展内容:
网友评论