Aop详解
aop技术简介
背景
对于一个业务来说,我们如何不在不修改源代码的基础上对对象进行功能拓展
方案一: 基于继承的方式实现其功能拓展
基于继承方式实现其功能拓展,优略势:
优势:简单,且容易理解
劣势:不够灵活(耦合太高,父类一旦修改方法,所有的子类都要跟着改)
方案二:基于组合方式实现其功能拓展
基于组合方式实现其功能拓展,优劣势:
优势:灵活(可以为指定接口下所有的实现类做功能拓展),稳定(组合的具体对象发生变化,不会影响当前类)
劣势:相对于继承来说不容易理解
总结
无论是继承还是组合都是基于OCP原则(开闭原则,对功能拓展开放,对修改关闭),都是去实现了对象的功能拓展,都有相应的优缺点,并且我们都需要去编写子类或者兄弟类,这些类中再去调用目标类对象(父类,兄弟类)的方法以及拓展业务逻辑,对于这些代码我们可以简化(由框架直接实现去共性:创建子类对象,创建兄弟类对象),特性交由用户自己实现
AOP是什么?
AOP是面向切面编程的一种编程思想,它要在不改变源码情况下对目标对象进行功能(动态)增强,为目标对象动态织入
SpringAOP快速入门
添加AOP依赖
AOP相关术语以及概念
切面:切入点+增强方法
切面对象:封装了拓展业务逻辑的对象,在spring中可以用@Aspect注解描述
切入点(PointCut) 定义切面拓展业务逻辑中的一些方法的集合(哪些方法运行时切入拓展业务),一般来说会通过切入点表达式进行相关定义,一个切面中可以包含多个切入点
连接点(JoinPoint) 封装了切入点方法的集合封装的某一个正在执行的目标方法的对象,可以通过连接点对象获取到具体执行的目标方法,甚至还可以去调用目标方法
增强方法: 切面内部封装的拓展业务逻辑的具体方法对象,一个切面中有多个增强方法(@around @before @after @afterThrowing @afterReturning )