最近重温研究下spring,根据源码画成流程图作为总结。因spring源码中各种判断语句各种神操作,所以我主要按照主流程总结画 的图,细节大多省略,目的是能掌握理解springAOP代理类的创建过程(普通Bean创建也是按照这种方式大同小异),以及aop生成代理类执行目标方法时中间所需要的增强器调用过程。其实从图里也大致能明白bean创建的生命周期了。下面流程图针对的是单例的bean。

AOP代理类的创建:

目标方法执行切面过程:

贴出我在跟源码时的代码例子:

//业务bean:
@Component
public class MyAopBean {public int demo(int x,int y){return x/y;}
}
//测试类
@Testpublic void test() {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AopBeanConfig.class);MyAopBean myAopBean = (MyAopBean) ctx.getBean("myAopBean");myAopBean.demo(4, 2);ctx.close();}
//AOP
@Aspect
public class LogAop {@Pointcut("execution(public int com.spring.bean.MyAopBean.*(..))")public void ponitCut(){}@Before(value = "ponitCut()")public void logBefore(JoinPoint joinPonit){System.out.println("@Before..."+joinPonit.getSignature().getName()+"..."+joinPonit.getArgs());}@After(value = "ponitCut()")public void logAfter(JoinPoint joinPonit){System.out.println("@After..."+joinPonit.getSignature().getName()+"..."+joinPonit.getArgs());}@AfterReturning(value = "ponitCut()",returning="result")public void logReturning(Object result){System.out.println("@AfterReturning..."+result);}@AfterThrowing(value = "ponitCut()",throwing="exception")public void logThrowing(Exception exception){System.out.println("@AfterThrowing..."+exception);}
}
//注解配置类
@Configuration
@EnableAspectJAutoProxy
public class AopBeanConfig {@Beanpublic MyAopBean myAopBean(){return new MyAopBean();}@Beanpublic LogAop logAop(){return new LogAop();}
}

spring的流程太多了,上面这2图只是一个简单主流程。个人觉得最好亲自去跟跟源码。边跟源码边画这2图真不容易。。。还好坚持画完了虽然有点难看,如有错误,恳请指点。

SpringAOP原理图解相关推荐

  1. 《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程

    参考网址:http://blog.csdn.net/luanlouis/article/details/50529868 0.前言 读完本文,你将了解到: 一.为什么说Jabalpur语言是跨平台的 ...

  2. java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  3. java图的建立field_《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的...

    0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述 ...

  4. java虚拟机标志_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  5. java class文件常量池_《Java虚拟机原理图解》 1.2.3、Class文件中的常量池详解(下)...

    Java内存区域         1.程序计数器(Program Counter Register)(线程私有的)         2.Java虚拟机栈 (Java Virtual Machine S ...

  6. 《Java虚拟机原理图解》1.3、class文件里的訪问标志、类索引、父类索引、接口索引集合...

    讲完了class文件里的常量池,我们就相当于克服了class文件里最麻烦的模块了.如今,我们来看一下class文件里紧接着常量池后面的几个东西:訪问标志.类索引.父类索引.接口索引集合. 1. 訪问标 ...

  7. java分层model_SpringMVC体系分层模式原理图解

    SpringMVC MVC介绍 MVC 全名是 Model View Controller,是 模型(model)-视图(view)-控制器(controller)的缩写, 是⼀种⽤于设计创建 Web ...

  8. 匈牙利算法python代码实现以及原理图解

    匈牙利算法python代码实现以及原理图解 1.匈牙利算法python代码实现: 2.原理图解: 1.匈牙利算法python代码实现: scipy中有对应的接口scipy.optimize.linea ...

  9. SRAM的工作原理图解

    注:其实CMOS静态反相器等价于一个非门!SRAM cell 6T等价于SR锁存器(也就是RS触发器) 6T:指的是由六个晶体管组成,如图中的M1.M2.M3.M4.M5.M6. SRAM中的每一bi ...

最新文章

  1. jQuery autoComplete 样式
  2. 33%制造企业跑步上云,云MES市场将达到23.4亿美元
  3. PL/SQL Developer如何修改表数据
  4. 设计模式——单例模式(懒汉模式,饿汉模式)
  5. sockaddr和sockaddr_in的区别
  6. ClickHouse深度揭秘
  7. python开发环境有哪些_python编程需要什么环境
  8. 华为郭平:很愿意使用高通芯片制造手机
  9. Linux下通过HostName访问主机以及修改HostName方法
  10. Social Engineering Data
  11. 《.NET WEB服务》 (二)
  12. 自解压shell文件的制作
  13. EDA课程设计-拔河游戏A设计
  14. win10 家庭版升级win11
  15. 计算机网络实验 IP网络规划与路由设计
  16. CSS中的四种定位以及top和margin-top的区别
  17. [学习笔记]Java如何处理EXCEL的读取
  18. Java变量-Java变量运算
  19. Unity XCode交互(unity调用讯飞的AIUI技能ios的sdk)
  20. Key Points about ActiveSupport::Concern

热门文章

  1. SOLOT的开发日记(二)
  2. HP大中华区总裁孙振耀退休感言(同勉)
  3. 医疗数据之数据仓库的创建
  4. ls的a l i r R s t 功能的实现
  5. 如何设计电子商务网站的功能
  6. 杭州西湖|杭州西湖简介| 杭州西湖景点介绍| 杭州西湖十景| 杭州西湖图片
  7. QPixmap 对象比较
  8. 电子企业招投标采购系统源码:规范提效采购-实现采购数字化
  9. JavaSwing 界面开发-登录界面
  10. 不跑不送不走人情,做好这10件小事,领导也会抬举你,越混越好