您的位置:首页 > 编程语言 > Java开发

Spring中AOP深入理解

2018-03-16 12:40 519 查看
AOP:面向切面编程,一种编程范式,无关语言。大部分语言都可以使用。

使用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 接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: