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