Aop概念的理解

版权声明:转载请申明出处,谢谢 https://blog.csdn.net/qq_35495763/article/details/88125531

Update Time:2019-3-4 Author:要你命三千又三千 type:学习笔记

AOP概念

概念

  1. 是什么?

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

  • 实现方式

预编译和动态代理

  • 功能

实现功能的统一维护

相对概念oop是面对对象进行处理的。
AOP是面向切面编程,可以理解为面对功能进行编程处理的方式。

实例

我们一般做活动的时候,一般对每一个接口都会做活动的有效性校验(是否开始、是否结束等等)、以及这个接口是不是需要用户登录。在这里插入图片描述
这有个问题就是,有多少接口,就要多少次代码copy。对于一个“懒人”,这是不可容忍的。好,提出一个公共方法,每个接口都来调用这个接口。这里有点切面的味道了。在这里插入图片描述同样有个问题,我虽然不用每次都copy代码了,但是,每个接口总得要调用这个方法吧(实现对象的灵活注入,多样的对象)。于是就有了切面的概念,我将方法注入到接口调用的某个地方(切点)。
在这里插入图片描述

举例二

举个例子,我们现在提供一个查询学生信息的服务,但是我们希望记录有谁进行了这个查询。如果按照传统的OOP的实现的话,那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现 类 (StudentInfoServiceImpl.java),同时为了要进行记录的话,那我们在实现类(StudentInfoServiceImpl.java)中要添加其实现记录的过程。这样的话,假如我们要实现的服务有多个呢?那就要在每个实现的类都添加这些记录过程。这样做的话就会有点繁琐,而且每个实现类都与记录服务日志的行为紧耦合,违反了面向对象的规则。那么怎样才能把记录服务的行为与业务处理过程中分离出来呢?看起来好像就是查询学生的服务自己在进行,但却是背后日志记录对这些行为进行记录,并且查询学生的服务不知道存在这些记录过程,这就是我们要讨论AOP的目的所在。AOP的编程,好像就是把我们在某个方面的功能提出来与一批对象进行隔离,这样与一批对象之间降低了耦合性,可以就某个功能进行编程。

实现方式

要实现以上的目标,我们可以使用一个动态代理类(Proxy),通过拦截一个对象的行为并添加我们需要的功能来完成。(java web 的拦截器就是使用AOP来实现的)
参考百度百科:面向切面编程

猜你喜欢

转载自blog.csdn.net/qq_35495763/article/details/88125531
今日推荐