Spring AOP

Java小课堂

分享人:张庆东

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

AOP,即面向切面编程。是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

2.知识剖析

今天小课堂简单的介绍一下如何使用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.编写切面类的增强逻辑,以及其匹配逻辑

3.常见问题

1.SpringAOP有什么用?


2.怎么开启JDK代理或CGLib代理?


4.解决方案

1.SpringAOP有什么用?


我们任务中有用到的:性能统计。在复盘项目中可以用到的:日志打印、异常抛出处理。除此之外还可以做到权限管理、事务处理、安全控制等


2.怎么开启JDK代理或CGLib代理?


在Spring配置文件的切面驱动中加入proxy-target-class="true"字段,"true"表示开启CGLib代理,"false"表示开启JDK代理,若不加入这一字段,则默认启用JDK代理


5.编码实战

6.扩展思考

7.参考文献

《精通Spring 4.x企业应用开发实战》

8.更多讨论

今天的分享就到这里啦,欢迎大家提问和探讨!