AOP工作流程

由于AOP是基于Spring容器管理的bean做的增强,所以整个工作过程需要从Spring加载bean说起:
流程1:Spring容器启动
容器启动就需要去加载bean,哪些类需要被加载呢?
需要被增强的类,如:BookServiceImpl
通知类,如:MyAdvice
注意此时bean对象还没有创建成功
流程2:读取所有切面配置中的切入点
在这里插入图片描述
上面这个例子中有两个切入点的配置,但是第一个ptx()并没有被使用,所以不会被读取,只会读取使用了的切入点pt()。
流程3:初始化bean
判定bean对应的类中的方法是否匹配到任意切入点
注意第1步在容器启动的时候,bean对象还没有被创建成功。
要被实例化bean对象的类中的方法和切入点进行匹配
匹配失败,创建原始对象,如UserDao
匹配失败说明不需要增强,直接调用原始对象的方法即可。
匹配成功,创建原始对象(目标对象)的代理对象,如: BookDao
匹配成功说明需要对其进行增强
对哪个类做增强,这个类对应的对象就叫做目标对象
因为要对目标对象进行功能增强,而采用的技术是动态代理,所以会为其创建一个代理对象
最终运行的是代理对象的方法,在该方法中会对原始方法进行功能增强
流程4:获取bean执行方法
获取的bean是原始对象时,调用方法并执行,完成操作。
获取的bean是代理对象时,根据代理对象的运行模式运行原始方法与增强的内容,完成操作。

Spring AOP (Aspect Oriented Programming) 工作流程通常包括以下几个步骤: 1. **通知(Advice)**:这是AOP的核心部分,它是在特定的Join Point(切点)上执行的行为。Spring提供了五种类型的Advice:前置通知(Before)、后置通知(After)、返回值通知(After Returning)、异常通知(After Throwing)和最终通知(After Completion)。通知可以在方法调用之前、之后或抛出异常时执行。 2. **切点(Pointcut)**:这是一个表达式,用于定义哪些方法或类需要应用通知。切点可以基于各种条件,如方法名、参数列表、注解等。 3. **连接点(JointPoint)**:这是AOP中的一个重要概念,表示程序中的某个执行点,例如方法调用。 4. **切面(Aspect)**:切面是包含一组通知的模块,它将横切关注点从业务逻辑中分离出来。在Spring中,切面由Advisor(通知与切点的关联)和切点定义组成。 5. **代理(Proxy)**:Spring AOP通过动态代理机制创建一个新的代理对象,该对象在运行时实现了所有相关的通知。对于JDK动态代理,它会生成一个实现了所有接口的新类;而对于CGLIB,它是基于字节码操作,实现更为高效。 6. **引入(Introduction)**:这是Spring特有的功能,允许你在代理类中添加新的方法或属性,而无需修改原始类。 7. **通知执行**:当满足切点条件时,Spring会按照配置顺序执行相应的通知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值