springAop

Aop概念

面向切面编程, 指扩展功能不修改源代码,将功能代码从业务逻辑代码中分离出来 ;与oop面向对象编程相辅相成

通俗理解: 比如有几个业务,都要写日志,原来是分开都执行,现在把写日志功能抽出来,通过切面类去处理;其实aop也有一点解耦的思想

Aop术语

切面:(Aspect)抽离出来的类

连接点:程序运行时的时间点

切入点:需要处理的连接点

通知:(advicce)切面类的方法

通知类型:嵌入目标对象方法时的插入类型

  • 前置通知:在方法之前执行
  • 后置通知:在方法之后执行
  • 异常通知:方法出现异常执行
  • 最终通知:在后置之后执行
  • 环绕通知:在方法之前和之后执行

引入:允许添加实现类属性和方法

目标对象:被通知的对象

代理:通知加到目标后的创建的的对象

织入:将切面插入的代码的方法

  • 编译期织入
  • 类装载期织入
  • 动态代理织入

动态代理

java有多种动态代理技术,最常用jdk和CGLib

jdk的动态代理

只能对实现了接口的类生成代理,而不是针对类,该目标类型实现的接口都将被代理。原理是通过在运行期间创建一个接口的实现类来完成对目标对象的代理

CGLib的动态代理

针对类实现代理,对是否实现接口无要求。原理是对指定的类生成一个子类,覆盖其中的方法,因为是继承,所以被代理的类或方法最好不要声明为final类型

AspectJ开发

支持注解开发切面的注解集合被称为“@AspectJ”注解。在AspectJ5中,我们不仅可以使用基于注解的方式来开发切面,也可以使用基于代码的方式来开发切面,也可以混用它们