- 通知(Advice):定义了什么是切面以及切面何时使用。
- 连接点(Joinpoint):在程序执行过程中,切面能够插入程序的所有的点。
- 切入点(Pointcut):切入点就是一个或多个连接点,连接点的子集。定义了切面何地进行。
- 切面(Aspect):通知和切入点的集合。
- 引入(Introduction):“引入”允许我们向现有的类添加新方法或属性。
- 目标(Target):被通知的对象。
- 代理(Proxy):“代理”是向目标对象被应用通知之后创建的对象。对于客户对象来说,目标对象(AOP之前)和代理对象(AOP之后)是一样的。
- 织入(Weaving):“织入”是把切面应用到目标对象之后创建代理对象的过程。切面在指定连接点织入到目标对象,在目标对象的生命周期里有多个时机可以发生织入过程:
编译时:切面在目标类编译时被织入,这需要特殊的编译器,AspectJ的织入编译器就以这种方式织入切面。
类加载时:切面在目标类加载到JVM时被织入。
运行时:切面在程序运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会动态创建一个代理对象来委托给目标对象。这就是SpringAOP 织入切面的方式。
Spring对AOP的支持:
- 经典的基于代理的AOP(各版本Spring)
- @AspectJ注解驱动的切面(仅Spring2.0)
- 纯POJO切面(仅Spring2.0)
- 注入式AspectJ(各版本Spring)
前三种都是基于代理的AOP变体。因此,Spring对AOP的支持局限于方法注入。
Spring的AOP框架的几个关键点:
- Spring通知是用Java编写的
- Spring只支持方法连接点。
- Spring在运行时通知对象。
时间: 2024-11-06 07:03:59