0
点赞
收藏
分享

微信扫一扫

Spring AOP的底层原理

上一篇 <<<SpringBean单例情况下解决循环依赖的原理
下一篇 >>>Spring AOP通知责任链模式图解


什么是SpringAop

概念:
切面: 关注点形成的类,就叫切面(类)!
切入点: 执行目标对象方法,动态植入切面代码。

Aop底层是如何实现

SpringAop中如何运用cglib和jdk动态代理的

SpringAOP如何对被代理实现增强的

AnnotationAwareAspectJAutoProxyCreator 作用是什么

AOP的实现方式

@Aspect                         指定一个类为切面类       
@Pointcut("execution(* com.itmayiedu.service.UserService.add(..))")  指定切入点表达式
@Before("pointCut_()")              前置通知: 目标方法之前执行
@After("pointCut_()")               后置通知:目标方法之后执行(始终执行)
@AfterReturning("pointCut_()")       返回后通知: 执行方法结束前执行(异常不执行)
@AfterThrowing("pointCut_()")           异常通知:  出现异常时候执行
@Around("pointCut_()")              环绕通知: 环绕目标方法执行
开启事物注解权限:
xml:<aop:aspectj-autoproxy></aop:aspectj-autoproxy>  
SpringBoot:@EnableAspectJAutoProxy
<!-- 切面类 -->
<bean id="aop" class="com.itmayiedu.aop2.AopLog2"></bean>
<!-- Aop配置 -->
<aop:config>
    <!-- 定义一个切入点表达式: 拦截哪些方法 -->
    <aop:pointcut expression="execution(* com.itmayiedu.service.UserService.*(..))"
        id="pt" />
    <!-- 切面 -->
    <aop:aspect ref="aop">
        <!-- 环绕通知 -->
        <aop:around method="around" pointcut-ref="pt" />
        <!-- 前置通知: 在目标方法调用前执行 -->
        <aop:before method="begin" pointcut-ref="pt" />
        <!-- 后置通知: -->
        <aop:after method="after" pointcut-ref="pt" />
        <!-- 返回后通知 -->
        <aop:after-returning method="afterReturning"
            pointcut-ref="pt" />
        <!-- 异常通知 -->
        <aop:after-throwing method="afterThrowing"
            pointcut-ref="pt" />
    </aop:aspect>
</aop:config>

推荐阅读:
<<<Spring IOC的初始化原理
<<<SpringBean的生命周期流程图
<<<SpringBean单例情况下解决循环依赖的原理
<<<Spring AOP通知责任链模式图解
<<<Spring AOP核心源码解读
<<<Spring事务常识汇总
<<<Spring声明事务原理及核心源码分析
<<<手动事务和自定义注解事务代码参考
<<<Spring常用注解汇总

举报

相关推荐

0 条评论