Spring中AOP深入理解
2018-03-16 12:40
519 查看
AOP:面向切面编程,一种编程范式,无关语言。大部分语言都可以使用。
使用AOP的好处:
1、集中处理某个切入点/横切逻辑
2、更容易删除、添加切点
3、解耦,增强程序可读性
应用场景:
1、权限控制
2、事务控制
3、缓存控制
4、日志处理
5、性能控制
6、分布式追踪
7、异常处理
切面表达式:
通配符:
* 表示任意
..表示一个包
+ 指定类及其子类
代理模式:
一共存在三种角色:客户端、代理对象、目标对象。
客户端通过代理对象间接和目标对象交互,也就是说目标对象委托代理对象和客户端交互。
以下是UML模型图:
有两个关键点:
1、客户端是通过接口来引用目标/代理对象(也正是符合了Java的面向对象编程(面向接口编程))
2、代理对象把真正的业务逻辑 委托给 目标对象,自己则处理额外的逻辑。
代码:
接口:
目标对象
代理对象:
客户端:
输出结果:
以上的代理模式称为静态代理,缺点就是一个接口,需要创建一个代理对象,如果接口很多或者接口新增方法,都很不方便。
以下介绍动态代理:消除代码
jdk代理和cglib代理
jdk代理 实现InvocationHandler 接口
使用AOP的好处:
1、集中处理某个切入点/横切逻辑
2、更容易删除、添加切点
3、解耦,增强程序可读性
应用场景:
1、权限控制
2、事务控制
3、缓存控制
4、日志处理
5、性能控制
6、分布式追踪
7、异常处理
切面表达式:
通配符:
* 表示任意
..表示一个包
+ 指定类及其子类
代理模式:
一共存在三种角色:客户端、代理对象、目标对象。
客户端通过代理对象间接和目标对象交互,也就是说目标对象委托代理对象和客户端交互。
以下是UML模型图:
有两个关键点:
1、客户端是通过接口来引用目标/代理对象(也正是符合了Java的面向对象编程(面向接口编程))
2、代理对象把真正的业务逻辑 委托给 目标对象,自己则处理额外的逻辑。
代码:
接口:
public interface Subject { void request(); }
目标对象
public class RealSubject implements Subject { @Override public void request() { System.out.println("subject real execute request"); } }
代理对象:
public class Proxy implements Subject { private RealSubject realSubject; public Proxy(RealSubject realSubject) { this.realSubject = realSubject; } @Override public void request() { System.out.println("before"); try { realSubject.request(); }catch (Exception e){ System.out.println("e:"+e.getMessage()); }finally { System.out.println("after"); } } }
客户端:
public class TestClient { public static void main(String[] args) { Subject subject = new Proxy(new RealSubject()); subject.request(); } }
输出结果:
before subject real execute request after
以上的代理模式称为静态代理,缺点就是一个接口,需要创建一个代理对象,如果接口很多或者接口新增方法,都很不方便。
以下介绍动态代理:消除代码
jdk代理和cglib代理
jdk代理 实现InvocationHandler 接口
相关文章推荐
- 深入理解Spring的两大特征(IOC和AOP)
- 深入理解Spring AOP之基本概念
- 深入理解Spring 之 源码剖析AOP(XML配置方式)
- 深入理解Spring 之 源码剖析 SpringBoot Aop 切面编织过程和代理执行过程
- 深入理解Spring AOP实战(基于注解)
- 深入理解Spring AOP实战(基于XML)
- 深入理解SpringAOP之代理对象
- 深入理解Spring的两大特征(IOC和AOP)
- 深入理解Spring的两大特征(IOC和AOP)
- 深入理解Spring AOP之二代理对象生成
- 深入理解Spring的两大特征(IOC和AOP)
- 深入理解Spring的两大特征(IOC和AOP)
- 深入理解Spring的两大特征(IOC和AOP)
- spring aop深入理解
- 深入理解Spring的两大特征(IOC和AOP)
- 深入理解Spring的两大特征(IOC和AOP)
- Spring AOP深入理解之拦截器调用
- 深入理解Spring的两大特征(IOC和AOP)
- 深入理解Spring的两大特征(IOC和AOP)
- 深入理解Spring AOP之基本概念