最近重温研究下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. 数据库设计:关于枚举类型的表结构设计法,个人拙见
  2. 尝试在centos5下运行phantomjs2
  3. 使用开源项目的正确姿势,都是血和泪的总结!
  4. BigDecimal.setScale 处理java小数点
  5. java执行完main就结束了吗_为什么main方法中执行完第一个方法完之后,后面的代码都不执行了?...
  6. Hadoop中的Streaming(20)
  7. TDD、BDD、ATDD、DDD 软件开发模式
  8. 浏览器linux2019,2019火狐浏览器
  9. 关于VLAN的几种接口模式
  10. 解决网络和Internet设置中只有飞行模式的问题
  11. 2.K8S部署-------- 制作CA证书
  12. KDD 2017 参会报告
  13. jQuery UI 实例 - 滑块(Slider)
  14. YouTube深度学习推荐
  15. 两种降维方法的总结——LLE(局部线性嵌入),ISOMAP(等度量映射)
  16. linux mkdir命令用法,linux里面的mkdir命令
  17. 模拟Android内存不足 activity回收 值保存 状态恢复
  18. 最好的五款骨传导耳机推荐,双十一必入骨传导蓝牙耳机
  19. php.ini配置文件详解(mac nginx1.8.0 php5.6 )持续更新中
  20. 计算机准考证要打印多大的纸,税务证准考证打印纸张大小要求多大的?

热门文章

  1. matlab app designer学习笔记2——图片、表格的导入
  2. node.js旅游景点分享网站 算机毕业设计源码03796
  3. 网站验证码WEB前端接入实例
  4. 基于中台思想的物流系统设计(一)
  5. bilibili录播姬使用文档
  6. 什么是黑五(Black Friday)
  7. Gradle入门系列(二)——groovy高级语法
  8. 用leaflet做地图数据分析与可视化
  9. Linux Ubuntu 18.04 换源(阿里云源)
  10. 用华为手机还在一天两充?打开这2个设置,两天充一次电都很简单