学习笔记之Spring的基本概念

Spring IOC

IOC是 Inverse of Control 的简写,译为控制反转,是一种软件开发思想,不限于Java语言。

IOC与DI(dependency injection,译为依赖注入)指的是同一个意思,只是描述的角度不同。

传统OOP开发中,对象都是通过new关键字开辟堆内存进行创建,代码耦合度太大,不易于维护。

IOC思想要求将设计好的对象交给框架(容器)进行统一管理,在需要使用的地方直接从容其中取出使用即可。

因此,调用者只能被动地接收对象而不能主动的去创建对象,做到对象控制权的反转。

Spring AOP

AOP是Aspect-Oriented Programming的简写,译为面向切面编程。

AOP术语

  • 连接点(JointPoint)

    特定点是程序执行的某个特定位置,如类开始初始化前、类初始化后、类的某个方法调用前/调用后、方法抛出异常后。

    一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就被称为连接点。

    Spring中仅支持方法的连接点,仅能在方法调用前、方法调用后、方法抛出异常时、方法调用前后这些程序执行点织入增强。

  • 切入点(Pointcut)

    连接点在程序类中客观存在,一个程序类可以拥有多个连接点。

    AOP通过"切入点" 定位特定的连接点。

    使用数据库查询的概念来理解切入点和连接点的关系:

    连接点相当于数据库中一条条客观存在的记录。

    而切入点就相当于查询条件。

    切入点和连接点不是一对一的关系,一个切入点可以匹配多个连接点。

  • 增强(Advice)

    增强是织入目标类连接点上的一段程序代码。

    在Spring中,增强除用于描述一段程序代码之外,还拥有另一个和连接点相关的信息,那就是执行点的方位。

    结合执行点的方位信息和切点信息,就可以找到特定的连接点。

    Spring提供的增强接口都是带方位名的,如:BeforeAdvice、AfterReturningAdvice、ThrowsAdvice等。

    BeforeAdvice表示方法调用前的位置,而AfterReturning表示访问返回后的位置。

    只有结合切点和增强,才能确定特定的连接点并实施增强逻辑。

  • 目标对象(Target)

    增强逻辑的织入目标类

  • 引介(Introduction)

    一种特殊的增强,为类添加一些属性和方法。

  • 织入(Weaving)

    织入是指将增强添加到目标类的具体连接点上的过程。

    补充 AOP的三种织入方式

    1. 编译期织入,要求使用特殊的Java编译器
    2. 类装载器织入,要求使用特殊的类装载器
    3. 动态代理织入,在运行期为目标类添加增强生成子类的方式

    Spring采用动态代理织入。

    AspectJ采用编译期织入和类装载器织入。

    说明:

    AspectJ

    AspectJ是AOP思想的实现之一,是语言级的AOP实现。

    AspectJ扩展了Java语言,定义了AOP的语法,能够在编译期提供横切代码的织入。

    AspectJ有一个专门的编译器用来生成遵守Java字节码编码规范的Class文件。

    Spring AOP

    AOP思想的另一种实现,使用纯Java实现,不需要专门的编译过程,也不需要特殊的类装载器,在运行期间通过代理方式想目标类织入增强代码。

    在Spring可以无缝的将Spring AOP、IOC和AspectJ整合在一起。

  • 代理(Proxy)

    一个类在被AOP织入增强后就会产生一个结果类,它就是融合了原类和增强逻辑的代理类。

  • 切面(Aspect)

    切面由切入点和增强(或引介)组成,包括了横切逻辑和连接点的定义。

AOP的工作中心在于如何将增强应用于目标对象的连接点上。包括:

  1. 如何通过切点和增强定位到连接点上
  2. 如何在增强中编写切面的代码

(完)

你可能感兴趣的:(学习笔记之Spring的基本概念)