发表于: 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的原理和用法更进一步,果然和别人讲课,自己学得到更多,但是就是要的时间太长了


进度:

准备好后和师兄还有施星大佬预约一下进行复盘评审



返回列表 返回列表
评论

    分享到