Spring AOP源码分析

Springaop源码解析 aop就是面向切面编程,是为了解耦而生。aop是不仅工作常用而且面试也经常问,所以看aop源码是非常有必要的。在看源码之前,我们先要带着结论去看源码,而不是一上来看的一脸懵逼,一定要先总后分。aop的流程就是在spring的生命周期过程中,会缓存所有的切面,然后在bean初始化的时候,它会找当前bean的所有方法是否跟缓存中的切面有匹配的,如果匹配,说明需要代理并创建代理对象,当调用被增强方法时,执行代理逻辑。本文基于springboot2.3.5.RELEASE,如果有错,欢迎指出。 阅读详情

1. 什么是AOP

与OOP对比,AOP是处理一些横切性问题,这些横切性问题不会影响到主逻辑实现的,但是会散落到代码的各个部分,难以维护。

AOP就是把这些问题和主业务逻辑分开,达到与主业务逻辑解耦的目的。

在这里插入图片描述

2. AOP的应用场景

  • 日志记录
  • 权限验证
  • 效率检查
  • 事务管理

3. Spring AOP原理及其应用

3.1 AOP相关概念

  • Aspect(切面): 通常是一个类(交给Spring容器管理),里面可以定义切入点和通知

  • JointPoint(连接点): 程序执行过程中的一个点,如方法的执行或异常的处理

  • Advice(通知): AOP在特定的切入点上执行的增强处理

  • 在这里插入图片描述

    通知类型:

    • Before advice
    • After returning advice
    • After throwing advice
    • After (finally) advice
    • Around advice

    调用顺序:

    Around advice>Before advice>After (finally) advice>After returning advice/After throwing advice

  • Pointcut(切入点): 连接点的集合

  • Target object(目标对象):被通知对象

  • AOP proxy:AOP框架创建的对象,代理就是目标对象的增强。

    • JDK dynamic proxy
    • CGLIB proxy

    思考: 初始化时织入还是获取对象时织入?

  • Weaving(织入):把代理逻辑加入到目标对象上的过程叫做织入

3.2 AOP的应用

3.2.1 Spring AOP with AspectJ pointcuts

Schema-based AOP Support

xml配置对AOP支持的 后置处理器

AspectJAwareAdvisorAutoProxyCreator
AnnotationAwareAspectJAutoProxyCreator // 配置 <aop:aspectj-autoproxy/>

spring-aop.xml

<!-- 自动为spring容器中那些配置@AspectJ切面的bean创建代理,织入切面
	proxy-target-class默认为false,表示使用jdk动态代理织入增强,
	当配为true时,表示使用Cglib动态代理技术织入增强-->
<aop:aspectj-autoproxy proxy-target-class="true"/>

<aop:config>
    <!-- 配置切面-->
    <aop:aspect id="myAspect" ref="xmlAspect">
        <!-- 配置切入点-->
        <aop:pointcut id="businessService"
                      expression="execution(* bat.ke.qq.com.dao.*.*(..))"/>
        <!-- 通知-->
        <aop:before pointcut-ref="businessService" method="before"/>
        <aop:after pointcut-ref="businessService" method="after"/>
    </aop:aspect>

</aop:config>

<bean id="xmlAspect" class="bat.ke.qq.com.config.XmlAspect"/>

<bean id="foxDao" class="bat.ke.qq.com.dao.FoxDao"/>
public class XmlAspect {
   
   

	public void before(JoinPoint point) {
   
   
		System.out.println("be
Spring源码分析AOP Spring AOP原理 Spring AOP源码。Spring AOP源码详解 阅读详情

相关推荐

Springaop源码分析

Springaop源码解析

qq_43418737的博客 1662

SpringBoot源码解析之AOP

Spring Aop源码解析

z_Jimmy的博客 1304

Spring AOP实现流程、源码分析

前言 AOP字面意思解释就是面向切面编程,面向切面编程是一种编程模型,我们知道JAVA是面向对象的也就是OOP,OOP这种面向对象的编程适用于定义纵向的关系,但是并不适用定义横向的关系。那么应对这种OOP的存在的这些不利,AOP面向切面的编程模型作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。 AO

程序员劝退师的博客 1027

SpringAOP系列--Proceedingjoinpoint--使用/教程/实例

本文介绍SpringSpringBoot)的AOPProceedingjoinpoint的用法。

IT利刃出鞘的博客 3万+

SpringAOP的JoinPoint类、Proceedingjoinpoint 类详解,AOP环绕通知获取注解信息

SpringAOP的JoinPoint类、Proceedingjoinpoint 类详解,AOP环绕通知获取注解信息

Little_Arya的博客 1万+

【源码解析】SpringBoot整合AOP原理解析

【源码解析】SpringBoot整合AOP原理解析

秋装什么的博客 823

Spring Aop初始化源码分析

1 工程简介 1.1 pom <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.tar

qq_34125999的博客 4607

Spring框架AOP源码分析

Spring框架AOP源码分析 1.写在前面 做java开发的不可能不适用spring框架,我们都知道spring框架的两个基础功能就是Ioc和aop,相比来说Ioc会应用的更广泛一些,但aop同样重要,今天就来详细分析一下springaop的实现原理,会深入spring源码级别,对于spring不太熟悉的同学来说可能有点难,没有办法,分析源码就是这样,需要对框架有一定的应用经验并且比较熟悉原理,毕竟一个成熟的框架,特别是像spring这样的java技术栈统治级的框架。如果想学习spring的基本功能推荐

ChirsPaul3的博客 337

最详细的Spring Aop源码分析

转载自: https://javadoop.com/post/spring-aop-source 之前写过 IOC 的源码分析,那篇文章真的有点长,看完需要点耐心。很多读者希望能写一写 Spring AOP源码分析文章,这样读者看完 IOC + AOP 也就对 Spring 会有比较深的理解了。今天终于成文了,可能很多读者早就不再等待了,不过主要为了后来者吧。 本文不会像 IOC 源码分析...

qq_33285543的博客 386

spring aop源码分析

什么是AOP 面试中经常被问到什么是AOP,其实AOP是一种技术实现,或者说是一种实现标准,实现AOP的技术有多种,但是通常所说的AOP,大家会不自觉的想到spring aop,因为spring aop被问了很多次。本文想从源码的执行流程上来简单说说AOP的实现原理。 AOP底层技术实现 aop的底层技术其实就是大家熟知的代理,spring aop中的代理主要有两种,cglib代理和JDK动态代理...

congge 980

Spring AOP介绍及源码分析

Spring AOP介绍及源码分析   spring4.0源码分析━━━(AOP实现)

wanxiaotao12-126-com 149

springAOP源码分析

springaop动态代理源码分析

m0_37938849的博客 278

Spring AOP 原理源码分析

目录准备工作从@EnableAspectJAutoProxy看起AnnotationAwareAspectJAutoProxyCreator创建过程AnnotationAwareAspectJAutoProxyCreator的执行时机创建AOP代理获取拦截器链小结 准备工作 在这里我先简单记录下如何实现一个aopAOP:【动态代理】 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式; 1、导入aop模块;Spring AOP:(spring-aspe

BOOM0BOOM的博客 275

Spring AOP 源码分析

AOP 面向切面编程,全称 Aspect Oriented Programming ,它是 OOP 的补充,OOP关注的是对象,而AOP的核心是切面(Aspect)。AOP可以在不修改功能代码的本身的前提下,使用运行时代理的技术对已有代码逻辑增强。AOP可以实现组件化,可插拔式的功能扩展,通过简单配置功能增强到指定的切入点。

程序猿进阶 2838

spring (四)AOP源码分析 五种通知的执行顺序

之前面的时候被问到有没有了解AOP的增强,当时我一脸懵逼 ,什么是增强?后来查了下,增强也就时通知。 通知的执行顺序 1、首先是目标方法没有异常的情况: 环绕通知、前置通知、目标方法、环绕通知,后置通知、返回通知 2、目标方法有异常的顺序: 环绕通知、前置通知、目标方法、后置通知、异常通知 所以各通知执行时机为 @Around:环绕通知:前置通知之前执行proceed方法之前的部分 @Before:前置通知,目标方法之前执行 @Around:环绕通知:目标方法执行之后执行proceed方法之后的部分 @Af

Ethan_199402的博客 3695

Spring AOP(六)【源码分析Spring中CgLib动态代理的实现

CgLib中AOP的实现是基于org.springframework.cglib.proxy包中Enhancer和MethodInterceptor(是CgLib包中的)两个接口来实现的。创建增强器Enhancer,并配置其callback为自定义的MethodInterceptor,然后创建代理。其中的代理逻辑与jdk相似,都是通过链式拦截器实现。

sun_tantan的博客 1031

Spring源码解析之四 ------ AOP原理和源码分析

在介绍AOP之前,想必很多人都听说AOP是基于动态代理和反射来实现的,那么在看AOP之前,你需要确实弄懂动态代理和反射。 巧了,我这里就有。 JDK的动态代理的实现和源码分析,参见我的这两篇文章 JDK的动态代理源码分析之一   (   http://blog.csdn.net/weililansehudiefei/article/details/73655925  ) JDK的动态代理源

怪盗基德 6237
上一篇: 深入理解JVM虚拟机(文末有视频讲解)
下一篇: 大型分布式网站架构技术总结
SpringBoot_
博客等级 码龄7年 445粉丝 96原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值