AOP是什么?如何使用AOP?

这篇具有很好参考价值的文章主要介绍了AOP是什么?如何使用AOP?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. AOP基本概念是什么?
  1. 什么是AOP?

AOP就是面向切面编程,或者叫面向方面编程,或者开玩笑的说叫面向方便面编程

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

用我的话讲,比如一个方法,他只能计算加法,而不能计算乘法,但是又不想改源码!这时候可以在外面创建一个类,在这个类中通过AOP的技术给这个方法进行添加功能的操作,这就是AOP。

  1. AOP的作用(特点)是什么?

AOP代表的是一个横向的关 系,将“对象”比作一个空心的圆柱体,其中封装的是对象的属性和行为;则面向方面编程的方法,就是将这个圆柱体以切面形式剖开,选择性的提供业务逻辑。而 剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹,但完成了效果。

实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

  1. AOP的底层原理是什么?

AOP底层使用了动态代理

有两种情况

(1、)有接口的情况:                                             

使用了JDK的动态代理

AOP是什么?如何使用AOP?

这里有个错误啊,代理类不用继承接口,不用不用继承,懒得改了,写几个字把。

(2、)没有接口的情况:

使用了CGLTB动态代理

AOP是什么?如何使用AOP?

  1. AOP动态代理的实现!
  1. 为什么要用动态代理?

在不改变原来的代码上进行 修改代码,有点层次感

  1. 如何使用动态代理?

(这里是有接口的情况下)

使用JDK的动态代理,使用Proxy类里面的方法创建代理对象

  1.  每个方法方法参数的作用?

调用newProxyInstance(1:ClassLoder,2:类<?>[] interfances,3:InvocationHand)

1:类的加载器

2:增强方法所在类,,这个类实现的接口,支持多个接口,所以已数组的形式展出

3:实现这个接口InvocationHand,创建代理的对象,写增强的方法。

  1. 每个方法的作用?

Proxy.newProxyInstance:将方法调用到处理程序,具有指定的代理类,调用处理程序的代理实例,该代理类,由指定的类加载器定义

并实现指定的接口

method.invoke:调用method类代表的方法,其中obj是对象名,args是传入method方法的参数

  1. 步骤

这里已继承接口的栗子举例

AOP是什么?如何使用AOP?

这里先创建一个接口

AOP是什么?如何使用AOP?  

然后创建一个类继承这个接口

接下来所有的话都在这张图中:

AOP是什么?如何使用AOP?

                     结果就是:

AOP是什么?如何使用AOP?

                               以上就是AOP的基础操作。

  1. AOP的基础操作术语有哪些?
  1. 连接点:

连接点是在应用执行过程中能够插入切面(Aspect)的一个点。这些点可以是调用方法时、甚至修改一个字段时

就是可以被增强的方法,就称为连接点

  1. 切入点:

实际被增强的方法,就是切入点,比如说有俩方法,一个方法被增强了一个没被增强,则被增强的方法叫做切入点,没被增强的方法就不能叫做切入点

切入点表达式:

execution (public * com.ljb.service.impl..*.*(..))

execution(权限修饰符,返回值类型,类全路径,方法名称,参数列表)

1.execution:指示符,execution是最常用的指示符,用于匹配方法执行的连接点。

2.public:访问修饰符,该参数可选。

3.第一个*号:返回值类型,*号表示所有的类型,即通配符。

4.包名:需要拦截的包名,后面的两个点表示当前包和当前包的所有子包,即例子中的com. ljb.service.impl包和该包的子孙包下所有类。

5.第二个*号:类名,*号表示所有的类。

*(..):方法名,*号表示所有方法,括号里面表示方法的参数,两个点表示任何参数,可有可无。

  1. 通知(增强)

真正被增强的逻辑部分称为通知(增强)

通知有五种类型:

1、前通知:方法执行之前,method:增强执行的方法

2、后通知:方法执行之后,又称最终通知,无论如何都执行

3、返回后通知:成功返回后,有异常时不执行

4、异常通知:发生异常后,只有异常抛出时才执行,不能try…catch异常

5、环绕通知:在方法的执行前后进行一些增强,在方法的执行前后进行一些增强 =前通知+返回后通知

  1. 切面

切面是一个动作,也叫一个过程:

把通知应当用到切入点的过程

  1. AOP操作的准备工作有哪些?

1、一般基于AspectJ实现AOP操作,他不是Spring组成部分,是独立AOP框架,一般把AspectJ和Spring框架一起使用,进行AOP的操作。

这有两种方式

  1. 注解方式
  2. Xml方式

这里我就不写xml的方式了

!引入依赖

链接:https://pan.baidu.com/s/14Ige68Y8xxhoe1DDgMKRnQ

提取码:1111

推荐全部导入。

先创建一个类

AOP是什么?如何使用AOP?

               然后写配置文件:这其中需要引入context与aop这两个名称空间,不会引入名称空间的小伙伴要去学咯。

AOP是什么?如何使用AOP?

然后再创建一个类对原有的类进行增加功能:这里的在前面都讲过了,那个权限修饰符可以省略不写,写了也不出错

AOP是什么?如何使用AOP?

最后进行测试:

AOP是什么?如何使用AOP?

运行结果正常,证明咱们没错。文章来源地址https://www.toymoban.com/news/detail-428517.html

到了这里,关于AOP是什么?如何使用AOP?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是域名转移和域名转移密码基本概念理解

    “域名转移”也叫“变更域名注册服务机构”、“域名转移注册商”或“域名转入”,是指将域名从现在的注册商转移到另外一家域名注册商,由其他的域名注册商为您的域名提供相关的服务。国际域名注册商是指由ICANN授权认证的国际域名顶级注册商;.CN域名注册商是指由

    2024年02月06日
    浏览(68)
  • 【Unity Shader】从入门到感慨(1)基本概念:什么是网格?什么是材质和Shader?

    如上图,模型的三角形面就叫做网格(Mesh),网格的本质是一堆顶点数据的规则排序,在Unity和UE中由三角形表示,Maya等DCC软件(Digital Content Creation)中则通常由四边形表示(俩个三角形刚好组成一个四边形)。 在Unity中我们新建一个Cube,

    2024年02月11日
    浏览(27)
  • 【Unity Shader】从入门到领悟(1)基本概念:什么是网格?什么是材质和Shader?

    如上图,模型的三角形面就叫做网格(Mesh),网格的本质是一堆顶点数据的规则排序,在Unity和UE中由三角形表示,Maya等DCC软件(Digital Content Creation)中则通常由四边形表示(俩个三角形刚好组成一个四边形)。 在Unity中我们新建一个Cube,

    2024年02月06日
    浏览(34)
  • 数据结构之数据结构要学什么,基本概念,三要素

          我从大二上学期的时候学了数据结构,但是当时对数据结构的重要性并不太重视,直到在升大三的暑假,才意识到数据结构对以后学语言和找工作方面的重要性,所以亡羊补牢,为时未晚,尝试着结合b站上王道考研数据结构课,来记录自己对知识和代码的理解。    

    2024年02月15日
    浏览(31)
  • 什么是统一建模语言(UML)UML与UML类图的基本概念

    UML(统一建模语言)是一种通用的建模语言,用于描述软件系统的结构、行为和交互。它提供了一组符号和规则,用于创建可视化的图形模型,帮助开发人员、设计师和利益相关者之间进行沟通和理解。 UML起源于20世纪90年代初,由James Rumbaugh、Grady Booch和Ivar Jacobson等知名软件

    2024年02月16日
    浏览(42)
  • 【Unity Shader】从入门到着魔(1)基本概念:什么是网格?材质?Shader?

    如上图,模型的三角形面就叫做网格(Mesh),网格的本质是一堆顶点数据的规则排序,在Unity和UE中由三角形表示,Maya等DCC软件(Digital Content Creation)中则通常由四边形表示(俩个三角形刚好组成一个四边形)。 在Unity中我们新建一个Cube,

    2024年02月09日
    浏览(30)
  • Spring AOP(AOP概念,组成成分,实现,原理)

    目录 1. 什么是Spring AOP? 2. 为什么要用AOP? 3. AOP该怎么学习? 3.1 AOP的组成 (1)切面(Aspect) (2)连接点(join point) (3)切点(Pointcut) (4)通知(Advice)  4. Spring AOP实现 4.1 添加 AOP 框架支持 ​编辑  4.2 定义切面 4.3 定义切点 4.4 定义通知 4.5 切点表达式说明 AspectJ

    2024年02月13日
    浏览(32)
  • Spring AOP(AOP概念、组成、Spring AOP实现及实现原理)

    学习 Spring AOP 之前,先要了解 AOP 是什么 AOP(Aspect Oriented Programming):面向切面编程,它和 OOP(面向对象编程)类似。 它是一种思想, 是对某一类事情的集中处理。 比如用户登录权限的效验,在学习 AOP 之前,在需要判断用户登录的页面,都要各自实现或调用用户验证的方

    2024年02月02日
    浏览(29)
  • EJB基本概念和使用

    EJB是sun的JavaEE服务器端组件模型,是一种规范,设计目标与核心应用是部署分布式应用程序。 EJB2.0过于复杂,EJB3.0的推出减轻了开发人员进行底层开发的工作量,它取消或最小化了很多(以前这些是必须实现)回调方法的实现,并且降低了实体Bean及O/R映射模型的复杂性。 EJB大

    2024年02月12日
    浏览(27)
  • 【Git】基本概念和使用方式

    Git是一个分布式版本控制系统,用于管理和跟踪计算机文件的变化。它最初是由Linus Torvalds开发的,用于管理Linux内核的开发。 Git的基本概念包括: 仓库(Repository):一个仓库是Git中存储项目文件和历史变更的地方。它可以是本地仓库(存在于本地计算机上)或远程仓库(存

    2024年02月20日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包