Spring中AOP深入理解

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 接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值