AOP + 动态代理 + Proxy模式

本文探讨了AOP(面向切面编程)的概念及其在后端编程中的应用,介绍了动态代理如何简化代码并实现类似拦截器的功能。通过JDK的Dynamic Proxy接口实现动态代理,并展示了如何在运行时通过注解实现AOP。文章还讨论了代理模式的基本要素,最后提出了一些关于注解实现AOP的问题和改进思考。
摘要由CSDN通过智能技术生成

动机

在后端编程中接触到了拦截器,用户权限的验证,统计一个函数的运行时间,这些都可以拦截器来实现,拦截器是AOP的一种实现形式。觉得这种东西是必不可少的。所以就升入了解一哈,顺便了解一哈设计模式,在将来的编程有大用。

什么是AOP

AOP:Aspect-Oriented Programming,可以理解为面向切面编程,是对OOP的一种补充。
首先先看看MVC模式,Model + Controller + View,在熟悉不过,其实在JavaWeb中可以细分为下面几层

  • 最上层一层当然是View层了,没啥好说的
  • 用户对View做出交互操作后,View传递一个Action给Controller层
  • Controller层对Action继续进行分发,向下给Service层
  • Service继续向下,给DAO层(Data Access Object)

注意以下几点:

  • Service层与DAO层都是属于Model层的
  • DAO层是对数据库最基本的操作,例如插入一条数据
  • 如果把所有的业务逻辑操作(例如登陆这个操作)操作都放在Controller,就会使Controller臃肿,不易维护,所以Service就承当了一部分的任务,Controller基本就几行代码(显示最基本的逻辑),对DAO层的操作都会放在Service层中。

AOP
这时候,AOP就要登场了,它就像一个切面插在这些层面之间,进行你想进行的一系列操作。

动态代理(Dynamic Proxy)

首先看一段bad code

public interface Calculator {
     void calculate(int a, int b);
}
public class CalculatorImpl implements Calculator {
   
   @Override
    public void calculate(int a, int b) {
        before();
        System.out.println(a + b);
        after();
    }
    private void before() {
        System.out.println("Before");
    }

    private void after() {
        System.out.println("After");
    }
}

为什么说这些代码写得差呢?把before()after()方法写死在calculate()里面,如果有许多方法要进行这样的before()``after(),那每个函数都要改,显然是不可能的(例如统计一个函数运行时间)。

这样,比较简单就是动态代理。

这2个类还是不变的

public interface Calculator {
     void calculate(int a, int b);
     void calculate2(int a, int b); // 测试用啦,其实都一样
}
public class CalculatorImpl implements Calculator {
   
    @Override
    public void calculate(int a, int b) {
        System.out.println(a + b);
    }

    @Override
    public void calculate2(int a, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值