AOP
一、AOP概述
1. 什么是AOP
- AOP(Aspect Oriented Programing) 面向切面编程
- AOP 采取横向抽取机制,取代了传统的继承纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存)
- Spring 的AOP 采用了纯Java 实现,不需要专门的编译过程和类加载器,在运行期间通过动态代理的方式向目标类注入增强代码。
2. AOP的应用场景
- 在不修改源代码的情况下对程序进行增强
- 权限校验、日志记录、性能监控、事务控制
3. AOP的底层实现
代理机制
Spring的AOP的底层用到两种代理机制
- JDK的动态代理 针对实现了接口的类产生代理
- CGLIB的动态代理 针对没有实现接口的类产生代理
二、什么是代理模式
1. 代理模式的概述
代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
这里使用到编程种的一个思想:不要随意去修改别人已经写好的代码或者方法,可以通过代理的方式来扩展该方法。(对修改关闭,对扩展开放)
2. 代理模式的分类
- 静态代理
- 动态代理
三、静态代理
静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类。
1. 实现方法
先把项目结构放出来
1). 使用继承关系实现静态代理
- 创建Person
- 创建SuperPerson
- 测试
2). 使用装饰者模式实现静态代理
- 创建SuperPerson2
- 测试
3). 静态代理实例(对数据持久层进行事务管理)
- 创建UserDao
- 创建UserDaoImpl
- 创建UserDaoProxy
- 测试
2. 静态代理总结
- 可以做到在不修改目标对象的功能前提下,对目标功能进行扩展
- 因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多。同时,一旦接口增加方法,目标对象与代理对象都要维护。
- 解决静态代理种的缺点:使用动态代理方式。