浅谈AOP面向切面

目录

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)。然后我们把用户验证这个操作抽取出来,称为切面。一个切面需要事先定义好切点,才知道在哪个地方切入。可以在一个切点执行之前或者执行之后,来执行你切面想要做的操作。下图就是在切点执行之前做切面中的验证操作。一般切面的提取都是横向来看整体的业务逻辑,提取出相同的业务逻辑作为切面,再把提取这些共同的业务逻辑的前后代码作为切点。

3.AOP的应用

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

4.SpringBoot例子

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

浏览器访问

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

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

先引入SpringBoot AOP的依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

新建aspect包,新建UserVerifyAspect类

运行访问:

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

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

效果:

 

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

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值