SpringAOP原理图解
最近重温研究下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原理图解相关推荐
- 《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程
参考网址:http://blog.csdn.net/luanlouis/article/details/50529868 0.前言 读完本文,你将了解到: 一.为什么说Jabalpur语言是跨平台的 ...
- java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...
- java图的建立field_《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的...
0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述 ...
- java虚拟机标志_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...
- java class文件常量池_《Java虚拟机原理图解》 1.2.3、Class文件中的常量池详解(下)...
Java内存区域 1.程序计数器(Program Counter Register)(线程私有的) 2.Java虚拟机栈 (Java Virtual Machine S ...
- 《Java虚拟机原理图解》1.3、class文件里的訪问标志、类索引、父类索引、接口索引集合...
讲完了class文件里的常量池,我们就相当于克服了class文件里最麻烦的模块了.如今,我们来看一下class文件里紧接着常量池后面的几个东西:訪问标志.类索引.父类索引.接口索引集合. 1. 訪问标 ...
- java分层model_SpringMVC体系分层模式原理图解
SpringMVC MVC介绍 MVC 全名是 Model View Controller,是 模型(model)-视图(view)-控制器(controller)的缩写, 是⼀种⽤于设计创建 Web ...
- 匈牙利算法python代码实现以及原理图解
匈牙利算法python代码实现以及原理图解 1.匈牙利算法python代码实现: 2.原理图解: 1.匈牙利算法python代码实现: scipy中有对应的接口scipy.optimize.linea ...
- SRAM的工作原理图解
注:其实CMOS静态反相器等价于一个非门!SRAM cell 6T等价于SR锁存器(也就是RS触发器) 6T:指的是由六个晶体管组成,如图中的M1.M2.M3.M4.M5.M6. SRAM中的每一bi ...
最新文章
- jQuery autoComplete 样式
- 33%制造企业跑步上云,云MES市场将达到23.4亿美元
- PL/SQL Developer如何修改表数据
- 设计模式——单例模式(懒汉模式,饿汉模式)
- sockaddr和sockaddr_in的区别
- ClickHouse深度揭秘
- python开发环境有哪些_python编程需要什么环境
- 华为郭平:很愿意使用高通芯片制造手机
- Linux下通过HostName访问主机以及修改HostName方法
- Social Engineering Data
- 《.NET WEB服务》 (二)
- 自解压shell文件的制作
- EDA课程设计-拔河游戏A设计
- win10 家庭版升级win11
- 计算机网络实验 IP网络规划与路由设计
- CSS中的四种定位以及top和margin-top的区别
- [学习笔记]Java如何处理EXCEL的读取
- Java变量-Java变量运算
- Unity XCode交互(unity调用讯飞的AIUI技能ios的sdk)
- Key Points about ActiveSupport::Concern