浅谈AOP面向切面

骑猪看日落 2022-05-18 06:58 316阅读 0赞

目录

1.AOP和OOP有什么区别?

2.如何理解AOP?

3.AOP的应用

4.SpringBoot例子


在了解AOP面向切面之前,相信很多朋友都接触过:

(POP) Procedure Oriented Pragramming 面向过程,面向过程的语言以C语言为代表

(OOP)Object Oriented Pragramming 面向对象,面向对象的语言有很多,Java,C#,C++等

所以要明白一点的是,不能说只有Java才有AOP,这样会被笑话。AOP是一种编程范式,与语言无关,是一种程序设计思想,就像面向对象一样。C#等其他语言也有AOP。

1.AOP和OOP有什么区别?

其实,AOP和OOP是两种完全的编程思想,那么可能有人会问:哪一种编程思想比较好用?或者优点比较多?事实上,这个问题本身就是一个错误。我在网上也看过这样一句话:AOP面向切面是对OOP面向过程的一个补充。这一句话就很明显说明AOP和OOP两种编程思想是相辅相成的关系,而不是竞争关系。OOP是把具体的事物给抽象出来,而AOP则是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。这句话可能听起来还是挺难理解。

2.如何理解AOP?

设想这种情况,一个项目里面,在访问每一个控制器之前,都需要进行一下用户验证,如果需要验证的控制器很多的话,我们编写用户验证的代码就会很多(即使你把用户验证写成一个方法),这种情况后期的维护很麻烦,比如验证的方式改变,你需要在每一个控制器前面的用户验证进行修改。AOP面向切面就是为了解决这种问题而诞生的。下面这张图片,每一个在执行之前需要用户验证的控制器,就是一个切点(Pointcut)。然后我们把用户验证这个操作抽取出来,称为切面。一个切面需要事先定义好切点,才知道在哪个地方切入。可以在一个切点执行之前或者执行之后,来执行你切面想要做的操作。下图就是在切点执行之前做切面中的验证操作。一般切面的提取都是横向来看整体的业务逻辑,提取出相同的业务逻辑作为切面,再把提取这些共同的业务逻辑的前后代码作为切点。

70

3.AOP的应用

AOP的应用在日志记录、性能统计、安全控制、事务处理、异常处理、系统统一的认证、权限管理等等,当然还可以是我们自己提取的一些业务逻辑。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

4.SpringBoot例子

用IDEA新建一个SpringBoot项目,添加一个HomeController控制器

70 1

浏览器访问

70 2

如果我们在“访问系统页面”之前,需要进行用户验证,我们通常的做法是:

70 3

如果方法多的话,我们就需要在每一个方法访问系统页面前进行用户验证操作,很明显这是很不利于维护的。

先引入SpringBoot AOP的依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-aop</artifactId>
  4. </dependency>

新建aspect包,新建UserVerifyAspect类

70 4

运行访问:

70 5

在hello方法中,没有加入任何代码,就能实现在访问改方法前执行其他的业务逻辑。

还可以在访问该方法后执行其他的业务逻辑,上面的是在访问方法之前执行的

70 6

效果:

70 7

项目源码:链接:https://pan.baidu.com/s/19kh4AmsFpCH_aZHnXWrb0g 密码:hmau

发表评论

表情:
评论列表 (有 0 条评论,316人围观)

还没有评论,来说两句吧...

相关阅读

    相关 AOP面向切面编程

    [1.引言][1.]         原文地址:[点击打开链接][1.] 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统的工程需要将系统分解成可以创

    相关 AOP面向切面编程

    AOP 面向切面编程 1.使用场景还原 当我们打开京东 app 进入首页,如果当前是没有网络的状态,里面的按钮点击是没有反应的。只有当我们打开网络的情况下,点击按钮

    相关 AOP面向切面

    面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软