发表于: 2017-11-07 23:16:41
2 607
今天完成的事情:
讲了小课堂,有点力不从心,下次小课堂过两天就开始慢慢准备吧,毕竟一周讲一次
大家好,我是IT修真院深圳分院第4期学员,一枚正直善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务3中,深度思考部分的知识点——Spring AOP
一、背景介绍
AOP,即面向切面编程。是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
二、知识剖析
今天小课堂简单的介绍一下如何使用JDK动态代理实现切面编程。然后详细的介绍一下使用注解方法来实现面向切面编程
SpringAOP分为三个部分,切面类,目标类,Spring配置
AOP常用的切面方法
1.Before 前置增强,在目标方法执行前实施增强
2.Around 环绕增强,在目标方法执行前后实施增强
3.AfterReturning 后置增强,在目标方法执行后实施增强
4.AfterThrowing 抛出异常增强,处理抛出的异常
代理实现
在截断目标类的运行,生成目标类的子类,在这个子类中加入诸如Before或Around等方法
JDK代理
只能代理接口,动态代理性能差,但创建动态代理的速度快
CGLib代理
能代理接口和类,与上面相反,动态代理性能好,但创建动态代理的速度慢
结论:若代理对象启用单例模式(无论new或get多少次,容器中都只有一个对象,即singleton)则适用于CGLib动态代理,相反,则适用于JDK动态代理
注解实现
三个步骤
1.将切面类和目标类诸如IOC容器,由Spring进行管理
2.在Spring配置文件中加入基于@Aspectj的切面驱动,即aop:aspectj-autoproxy
3.编写切面类的增强逻辑,以及其匹配逻辑
三、常见问题
1.SpringAOP有什么用?
2.怎么开启JDK代理或CGLib代理?
四、解决方案
1.读不懂,也不想读正则表达式怎么办?
我们任务中有用到的:性能统计。在复盘项目中可以用到的:日志打印、异常抛出处理。除此之外还可以做到权限管理、事务处理、安全控制等
2.正则表达式的标准并不统一,JAVA上能用的Python并不一定能用,怎么办?
在Spring配置文件的切面驱动中加入proxy-target-class="true"字段,"true"表示开启CGLib代理,"false"表示开启JDK代理,若不加入这一字段,则默认启用JDK代理
五、编码实战
六、扩展思考
七、参考文献
《精通Spring 4.x企业应用开发实战》
明天计划的事情:
看完老大的Live,在看一下视频
遇到的问题:
无
收获:
对SpringAOP的原理和用法更进一步,果然和别人讲课,自己学得到更多,但是就是要的时间太长了
进度:
准备好后和师兄还有施星大佬预约一下进行复盘评审
评论