深度剖析Spring AOP源码,图文详解,小白也能看明白。

本文首先介绍了AOP的基本概念,包括连接点、切点、通知、织入等,并提供了一个简单的AOP示例。接着,详细阐述了SpringAOP的工作流程,分为前置处理、后置处理和执行切面三个阶段,特别是通过递归和责任链模式执行切面的方法。最后,通过对源码的解读,揭示了Spring如何创建和执行AOP代理对象的内部机制。
摘要由CSDN通过智能技术生成

一:概述以及目录

前两篇的源码解析,涉及到很多基础知识,但是源码的解读都不难,这篇⽂章刚好相反,依赖的基础知识不多,但 是源码⽐较难懂。 下⾯我会简单介绍⼀下 AOP 的基础知识,以及使⽤⽅法,然后直接对源码进⾏拆解。目录如下:

二:基础知识

2.1 什么是 AOP ?

AOP 的全称是 “Aspect Oriented Programming”,即⾯向切⾯编程。

在 AOP 的思想⾥⾯,周边功能(⽐如性能统计,⽇志,事务管理等)被定义为切⾯,核⼼功能和切⾯功能分别独 ⽴进⾏开发,然后把核⼼功能和切⾯功能“编织”在⼀起,这就叫 AOP。

AOP 能够将那些与业务⽆关,却为业务模块所共同调⽤的逻辑封装起来,便于减少系统的重复代码,降低模块间的 耦合度,并有利于未来的可拓展性和可维护性。

2.2 AOP 基础概念

  • 连接点(Join point):能够被拦截的地⽅,Spring AOP 是基于动态代理的,所以是⽅法拦截的,每个成员⽅ 法都可以称之为连接点;
  • 切点(Poincut):每个⽅法都可以称之为连接点,我们具体定位到某⼀个⽅法就成为切点; 增强/通知
  • (Advice):表示添加到切点的⼀段逻辑代码,并定位连接点的⽅位信息,简单来说就定义了是⼲什 么的,具体是在哪⼲;
  • 织⼊(Weaving):将增强/通知添加到⽬标类的具体连接点上的过程;
  • 引⼊/引介(Introduction):允许我们向现有的类添加新⽅法或属性,是⼀种特殊的增强;
  • 切⾯(Aspect):切⾯由切点和增强/通知组成,它既包括了横切逻辑的定义、也包括了连接点的定义。

上⾯的解释偏官⽅,下⾯⽤“⽅⾔”再给⼤家解释⼀遍。

切⼊点(Pointcut):在哪些类,哪些⽅法上切⼊(where); 通知(Advice):在⽅法执⾏的什么时机(when:⽅法前/⽅法后/⽅法前后)做什么(what:增强的功 能); 切⾯(Aspect):切⾯ = 切⼊点 + 通知,通俗点就是在什么时机,什么地⽅,做什么增强; 织⼊(Weaving):把切⾯加⼊到对象,并创建出代理对象的过程,这个由 Spring 来完成。

5 种通知的分类:

  • 前置通知(Before Advice):在⽬标⽅法被调⽤前调⽤通知功能;
  • 后置通知(After Advice):在⽬标⽅法被调⽤之后调⽤通知功能;
  • 返回通知(After-returning):在⽬标⽅法成功执⾏之后调⽤通知功能;
  • 异常通知(After-throwing):在⽬标⽅法抛出异常之后调⽤通知功能;
  • 环绕通知(Around):把整个⽬标⽅法包裹起来,在被调⽤前和调⽤之后分别调⽤通知功能。

2.3 AOP 简单示例

新建 Model 类:

@Data
@Service
public class Model {
    public void everyDay() {
        System.out.println("睡觉");
    }
}
复制代码

添加 ModelAspect 切⾯:

@Aspect
@Component
public class ModelAspect {
    @Pointcut("execution(* com.java.Model.everyDay())")
    private void myPointCut() {
    }
    // 前置通知
    @Before("myPointCut()")
    public void myBefore() {
        System.out.println("吃饭");
    }
    // 后置通知
    @AfterReturning(value = "myPointCut()")
    public void myAfterReturning() {
        System.out.println("打⾖⾖。。。");
    }

}
复制代码

applicationContext.xml 添加:

<!--启⽤@Autowired等注解-->
<context:annotation-config/>
<context:component-scan base-package="com" />
<aop:aspectj-autoproxy proxy-target-class="true"/>
复制代码

程序⼊⼝:

public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context =new
                ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        M
Java技术攻略
关注 关注
  • 12
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
2024最新首发,全网最全 Spring Boot 学习宝典(附思维导图)
**My Coding Family**
04-20 8万+
从0到1以知识点+实例+项目的教学模式对SpringBoot框架由浅入深进行学习,快来跟bug菌一起学习吧。
Spring系列(五):Spring AOP源码解析
dijinan2423的博客
09-02 716
一、@EnableAspectJAutoProxy注解   在主配置类中添加@EnableAspectJAutoProxy注解,开启aop支持,那么@EnableAspectJAutoProxy到底做了什么?接下来分析下:   @EnableAspectJAutoProxy点进去如下:   此时看到了我们非常熟悉的@Import注解,@Import(AspectJAut...
最全Java注解图文详解(建议收藏)
03-19
最全Java注解图文详解(建议收藏)
Spring AOP 源码剖析
最新发布
LHY537200的博客
08-08 1007
Spring AOP通过动态代理技术提供了一种灵活的方式来增强现有方法的功能,而无需修改源代码。其源码实现涉及Bean生命周期管理、动态代理技术、责任链模式等多个方面,深入理解这些机制有助于更好地使用和维护Spring AOP
源码解读系列-spring源码(十二)- AOP机制及注解的解析
dengwei_dw的专栏
05-11 783
AOP(Aspect Orient Programming):面向切面编程;用途:用于系统中的横切关注点,比如日志管理,事务管理;实现:利用代理模式,通过代理对象对被代理的对象增加功能。所以,关键在于AOP框架自动创建AOP代理对象,代理模式分为静态代理和动态代理;框架: AspectJ使用静态代理,编译时增强,在编译期生成代理对象;SpringAOP使用动态代理,运行时增强,在运行时,动态生成代理对象;
Spring 源码深度解析AOP源码配置解析
忆~遂愿的博客
05-30 2870
Spring框架作为Java应用程序开发中最受欢迎的框架之一,其AOP(面向切面编程)功能是其核心之一。通过AOP,开发人员可以将横切关注点(如日志记录、事务管理等)与核心业务逻辑分离,从而提高代码的模块化和可维护性。深入探讨了Spring AOP源码配置,着重分析了如何通过配置实现AOP的相关功能。通过对Spring AOP源码配置的深度解析,帮助读者更加全面地理解了AOPSpring框架中的应用和实现方式,为进一步学习和应用Spring AOP提供了有力的指导和参考。
Spring AOP 源码解析
weixin_34191734的博客
10-24 355
之前写过 IOC 的源码分析,那篇文章真的有点长,看完需要点耐心。很多读者希望能写一写 Spring AOP源码分析文章,这样读者看完 IOC + AOP 也就对 Spring 会有比较深的理解了。今天终于成文了,可能很多读者早就不再等待了,不过主要为了后来者吧。本文不会像 IOC 源码分析那篇文章一样,很具体地分析每一行 Spring AOP源码,目标读者是已经知道 Spring IOC...
Spring AOP源码分析
长沙老码农
01-22 1805
目录 1、AOP是什么 2、AOP 的作用及其优势 3、AOP 的底层实现 3.1 JDK动态代理: 3.2 CGLIB动态代理 4、AOP相关概念 5、AOP运行流程图 6、AOP源码解析 6.1 源码解析须知 6.2 注册自动代理创建器 6.3 触发后置处理器 6.4 创建Proxy过程分析 6.5 代理回调增强 6.6 增强器执行 6.7 增强器执行顺序 7、源码总结 1、AOP是什么 AOP 为 Aspect Oriented Programming ..
Spring AOP 源码解读
孤刺
09-27 3902
name: spring-aop-source title: Spring AOP 源码解析 date: 2020-03-25 15:03:38 tags: spring-aop-source categories: 文章目录前言本文使用的调试代码IOC 容器管理 AOP 实例ProxyFactory 详解基于注解的 Spring AOP 源码分析闲聊 InstantiationAwareBeanPostProcessor小结 之前写过 IOC 的源码分析,那篇文章真的有点长,看完需要点耐心。很多读者希.
Spring Aop源码分析
DS_1258的博客
03-04 200
最近看了SpringAop源码实现 大概记录一下aop源码流程 创建一个最简单的一个测试类 package com.zcg.learn.Test; import org.aopalliance.aop.Advice;import org.junit.Test;import org.springframework.aop.aspectj.AspectJExpressionPoi...
图文详解IDEA2022整合SSM框架的maven webapp(附源码)
10-21
1. **Spring**:这是一个全面的企业级应用开发框架,提供了依赖注入(DI)、AOP(面向切面编程)、事务管理等功能。在SSM中,Spring主要负责控制层和事务管理。 2. **Struts2**:这是一个基于MVC设计模式的Java Web...
Java面试题:红黑树详细分析(图文详解)
m0_57064331的博客
06-16 439
前言: 随着秋招的开启,不管是应届毕业生找工作,还是在职程序员跳槽去找更高薪水的工作,都要面临面试这一难关。应对面试不仅需要丰富的项目经历,还需要牢固的基础知识。在这里整理一些比较详细的Java高频面试题,并给出答案供大家参考。这些面试题与答案,毫不夸张的说涵盖Java面试中大部分的知识,当然关于实际项目开发方面有所欠缺,这就需要大家靠自己了。 Spring Security观后感——手绘思维脑(供参考) 手绘的思维导图,是我自己根据自身的情况读完这套阿里出品的Spring Security王者晋级
Springaop源码分析
qq_43418737的博客
05-12 1419
Springaop源码解析
Spring源码分析】AOP源码解析(下篇)
weixin_34252090的博客
04-30 129
AspectJAwareAdvisorAutoProxyCreator及为Bean生成代理时机分析 上篇文章说了,org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator这个类是Spring提供给开发者的AOP的核心类,就是AspectJAwareAdvisorAutoProxyCreator完成了...
Spring AOP源码 浅析
yangsnow_rain_wind的专栏
05-03 551
NND ,源码实在复杂,先整理个思路吧 AOP配置文件demo &lt;bean id="daoImpl" class="com.xx.xx.pcwebv2.Dao.CDaoImp" /&gt; &lt;bean id="timeHandler" class="com.xx.xx.pcwebv2.Dao.TimeHandler" /&gt; &lt;aop:config prox
spring aop源码详解
修理男爵的博客
08-21 426
spring 通过 aop 来实现事务功能 事务有两个最最最主要的属性 propagation : 事务的传播行为 isolation : 事务的隔离级别 平时开发中,正常都使用@Transactional 注解来实现事务功能。 由于事务使用的是 aop 来实现,所以同 aop 一样,操作时使用的是代理对象。只有通过代理对象来调用方法时,事务才能生效! 看一个最简单的例子,下面讲源码也会以这个为例。 @Transactional @Override public void pay(Paym.
spring aop源码
07-31
Spring AOP源码实现涉及到多个类和方法。其中,关于代理对象的创建和环绕方法的查找是比较重要的部分。 根据引用[1]和引用[3]的内容,我们可以得出以下结论: 1. Spring AOP的代理对象的创建发生在BeanPostProcessor的initializeBean方法中。 2. 在initializeBean方法中,Spring会通过getAdvicesAndAdvisorsForBean方法来查找bean对应的环绕方法。 因此,可以说Spring AOP源码实现中,代理对象的创建和环绕方法的查找都发生在BeanPostProcessor的initializeBean方法中。
写文章

热门文章

  • 这7种UML图的画法每个程序员都应该掌握~ 10527
  • JSON 与 Java 对象之间的转化 9868
  • Flowable 任务监听器与执行监听器 9390
  • 一文搞懂Reactor模型与实现 6291
  • Spring @Validated 失效分析 5504

最新评论

  • 一文搞懂Reactor模型与实现

    如梦亦如幻 如露亦如电: 你这个怼人的技术倒是可以

  • 一文搞懂Reactor模型与实现

    Ha_Ha_Wu: 单Reactor单线程里,在select方法中,所有事件都是直接调用run,那n个事件至少启动n个线程啊

  • 七种代码耦合类型的图解:你的属于哪一种?

    阿J~: 学到了,一起加油。欢迎回赞哦!

大家在看

  • [240916] X-CMD 发布 v0.4.11:新增 mac 模块,集成 MacOS 实用功能 | 新增 OpenAI o1 系列模型的支持 1657
  • 脑机接口(Brain-Computer Interface, BCI):从科幻到现实的脑机接口技术
  • springboot基于Java技术人人享美食平台的设计与实现
  • springboot+vue在线学习和考试系统【开题+程序+论文】
  • 基于springboot的篮球交流管理系统

最新文章

  • Spring 框架之 AOP 原理深度剖析
  • 万字详细解析Dubbo
  • SpringBoot 如何结合 Liquibase 实现数据库的变更管理?
2023年570篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司网站如何做优化推广营销整形网站优化网站备案可以优化吗seo网站优化合同范文广东网站竞价优化收费当当网网站战略优化做神马网站优化盐田怎样做好网站优化长沙网站seo优化网站优化四大角度莆田网站优化在线咨询企业网站优化接单网站页面优化分析相城外贸型网站优化软件日常网站优化工具新市区网站seo优化排名概念网站优化要做哪些太原建材行业网站优化推广优点衡水做网站建设SEO优化推广网站关键词优化分析陕西网站长尾关键词优化网站可以只做优化吗seo优化网站要求营口网站优化联系方式邢台外贸网站优化推广重庆网站seo优化排名兴安网站优化厂家青浦区企业网站优化哪家好深圳外贸网站关键词优化排名宝坻网站建设优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化