iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring AOP的基本概念是什么
  • 394
分享到

Spring AOP的基本概念是什么

2023-06-20 16:06:49 394人浏览 八月长安
摘要

这篇文章主要介绍“spring aop的基本概念是什么”,在日常操作中,相信很多人在Spring AOP的基本概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring AOP的基本概念是什么”的疑

这篇文章主要介绍“spring aop的基本概念是什么”,在日常操作中,相信很多人在Spring AOP的基本概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring AOP的基本概念是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 举个栗子给大家讲一下代理:

  • 什么是AOP?

    • 基本术语

      • (1)切面(Aspect)

      • (2) 目标对象(Target)

      • (3) 连接点(JoinPoint)

      • (4) 切入点(PointCut)

      • (5) 通知(Advice)

      • (6) 织入(Weaving)

    • 静态代理模式

      • 动态代理模式

      举个栗子给大家讲一下代理:

      我相信大家都知道明星吧。

      大部分明星是都有经纪人的。

      假如我们是一个大厂,现在想要找一个明星代理产品,那我们会直接找到明星吗?不。现实中,你大部分找到的都是找到明星的代理人(经纪人)。经纪人通过和你约谈,了解产品,看自己的家明星,是否可以接下这个广告。觉得可以,就会和你商量签订合同、商谈活动日期、排练等等。 虽然商家知道自己并没有找到明星,但是他却知道这件事情已经成了。

      在这个流程中,商家找了明星的经纪人。但是却完成了最初的任务。

      明星经纪人 帮明星签订合同、订下活动日期等等。

      明星专注于拍广告。

      这个时候我们是不是就可以讲 明星经纪人增强了明星的功能勒?

      什么是AOP?

      与OOP对比,AOP是处理一些横切行问题。这些横切性问题不会影响到主逻辑的实现,但是会散落到代码的各个部分,难以维护。AOP就是把这些问题和主业务逻辑分开,达到与主业务逻辑解耦的目的。

      Spring AOP的基本概念是什么

      AOP是一种面向切面的编程思想。这些横切性问题,把它们抽象为一个切面,关注点在切面的编程,这就是所谓的AOP。

      AOP关注点是横切性问题:

      Spring AOP的基本概念是什么

      基本术语

      (1)切面(Aspect)

      跨越多个类的关注点的模块化。事务管理是Java 应用程序中横切关注点的一个很好的例子。在 Spring AOP 中,方面是通过使用常规类(基于模式的方法)或使用@Aspect注解注解的常规类 (@AspectJ 风格)实现的。

      切面是一个横切关注点的模块化,一个切面能够包含同一个类型的不同增强方法,比如说事务处理和日志处理可以理解为两个切面。切面由切入点和通知组成,它既包含了横切逻辑的定义,也包括了切入点的定义。 Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。

      可以简单地认为, 使用 @Aspect 注解的类就是切面

      (2) 目标对象(Target)

      目标对象指将要被增强的对象,即包含主业务逻辑的类对象。或者说是被一个或者多个切面所通知的对象。

      (3) 连接点(JoinPoint)

      程序执行过程中明确的点,如方法的调用或特定的异常被抛出。连接点由两个信息确定:

      • 方法(表示程序执行点,即在哪个目标方法)

      • 相对点(表示方位,即目标方法的什么位置,比如调用前,后等)

      简单来说,连接点就是被拦截到的程序执行点,因为Spring只支持方法类型的连接点,所以在Spring中连接点就是被拦截到的方法。

      讲人话 就是spring允许你使用通知的地方

      (4) 切入点(PointCut)

      上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有几十个连接点了对把,但是你并不想在所有方法附近都使用通知(使用叫织入,以后再说),你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。

      @Pointcut("execution(* com.remcarpediem.test.aop.service..*(..))")public void pointcut() {}

      上边切入点的匹配规则是com.remcarpediem.test.aop.service包下的所有类的所有函数。

      (5) 通知(Advice)

      Spring AOP 包括以下类型的通知:

      • 前通知(Before advice):在连接点之前运行的通知,但没有能力阻止执行流继续到连接点(除非它抛出异常)。

      • 返回后通知(After returning advice):在连接点正常完成后运行的通知(例如,如果方法返回而没有抛出异常)。

      • 抛出异常通知后(After throwing advice):如果方法通过抛出异常退出,则运行通知。

      • After (finally) 通知(After (finally) advice):不管连接点退出的方式(正常或异常返回)都将运行的通知。

      • 环绕通知(Around advice):环绕连接点的通知,例如方法调用。这是最有力的建议。环绕通知可以在方法调用前后执行自定义行为。它还负责选择是继续连接点还是通过返回自己的返回值或抛出异常来缩短建议的方法执行。

      // @Before说明这是一个前置通知,log函数中是要前置执行的代码,JoinPoint是连接点,@Before("pointcut()")public void log(JoinPoint joinPoint) { }
      (6) 织入(Weaving)

      织入是将切面和业务逻辑对象连接起来, 并创建通知代理的过程。织入可以在编译时,类加载时和运行时完成。在编译时进行织入就是静态代理,而在运行时进行织入则是动态代理。

      关键就是:切点定义了哪些连接点会得到通知

      静态代理模式

      所谓静态代理就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强。ApsectJ是静态代理的实现之一,也是最为流行的。静态代理由于在编译时就生成了代理类,效率相比动态代理要高一些。AspectJ可以单独使用,也可以和Spring结合使用。

      动态代理模式

      与静态代理不同,动态代理就是说AOP框架不会去修改编译时生成的字节码,而是在运行时在内存中生成一个AOP代理对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

      Spring AOP中的动态代理主要有两种方式:jdk动态代理和CGLIB动态代理。

      JDK代理通过反射来处理被代理的类,并且要求被代理类必须实现一个接口。核心类是 InvocationHandler接口 和 Proxy类。

      而当目标类没有实现接口时,Spring AOP框架会使用CGLIB来动态代理目标类。 

      CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类。CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。核心类是 MethodInterceptor 接口和Enhancer 类

      到此,关于“Spring AOP的基本概念是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

      --结束END--

      本文标题: Spring AOP的基本概念是什么

      本文链接: https://www.lsjlt.com/news/298203.html(转载时请注明来源链接)

      有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

      本篇文章演示代码以及资料文档资料下载

      下载Word文档到电脑,方便收藏和打印~

      下载Word文档
      猜你喜欢
      • Spring AOP基本概念是什么
        本篇内容介绍了“Spring AOP基本概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  什么是AOP  AOP即面向切面编程。 ...
        99+
        2023-06-02
      • Spring AOP的基本概念是什么
        这篇文章主要介绍“Spring AOP的基本概念是什么”,在日常操作中,相信很多人在Spring AOP的基本概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring AOP的基本概念是什么”的疑...
        99+
        2023-06-20
      • Spring AOP基本概念
        目录举个栗子给大家讲一下代理:什么是AOP?基本术语(1)切面(Aspect)(2) 目标对象(Target)(3) 连接点(JoinPoint)(4) 切入点(PointCut)(...
        99+
        2022-11-12
      • Spring中AOP的概念是什么
        这篇文章主要介绍“Spring中AOP的概念是什么”,在日常操作中,相信很多人在Spring中AOP的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring中AOP的概念是什么”的疑惑有所帮助!...
        99+
        2023-07-02
      • Spring基础之AOP的概念介绍
        目录前言Spring的AOP的功能和目标代理方式@AspectJ的支持启用@AspectJ通过Java注解启用AspectJ注解支持:通过XML配置启用AspectJ注解定义一个切面...
        99+
        2022-11-13
      • Spring AOP的概念与实现过程是什么
        今天小编给大家分享一下Spring AOP的概念与实现过程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Ao...
        99+
        2023-07-05
      • J2SE的基本概念是什么
        本篇内容主要讲解“J2SE的基本概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“J2SE的基本概念是什么”吧!     Java概述:      目前Java主要应用于中间件的开发(mi...
        99+
        2023-06-03
      • CSS基本概念是什么
        这篇文章主要介绍“CSS基本概念是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS基本概念是什么”文章能帮助大家解决问题。 CSS正文: 1、CSS全称...
        99+
        2022-10-19
      • Nginx基本概念是什么
        本篇内容主要讲解“Nginx基本概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Nginx基本概念是什么”吧!什么是 Nginx?Nginx 最初是作为一个 Web 服务器创建的,用于解...
        99+
        2023-06-27
      • JAVA基本概念是什么
        这篇文章主要为大家展示了“JAVA基本概念是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JAVA基本概念是什么”这篇文章吧。一、java发展史1.java之父:詹姆斯·高家林2.关键时间点...
        99+
        2023-06-25
      • 什么是SQLServer表的基本概念
        什么是SQLServer表的基本概念,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SQLServer表的基本概念  表是包含数...
        99+
        2022-10-19
      • C++引用的基本概念是什么
        本篇文章给大家分享的是有关C++引用的基本概念是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C++编程语言中有很多应用方法和C语言有相同之处。那么作为C语言的升级版本,它...
        99+
        2023-06-17
      • HTML基本结构的概念是什么
        这篇文章主要介绍了HTML基本结构的概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTML基本结构的概念是什么文章都会有所收获,下面我们一起来看看吧。 <!-...
        99+
        2022-10-19
      • python中Fearturetools的基本概念是什么
        python中Fearturetools的基本概念是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python的五大特点是什么python的五大特点:1.简单易学,开发程序...
        99+
        2023-06-14
      • C++时间的基本概念是什么
        本篇文章为大家展示了C++时间的基本概念是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C++编程语言中对于时间的操作还是比较多的,能帮助程序开发人员在实际编程中实现各种对时间操作的需求。我们近...
        99+
        2023-06-17
      • web前端基本概念是什么
        本篇内容介绍了“web前端基本概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一 前端概述现代互联...
        99+
        2022-10-19
      • SNMP相关基本概念是什么
        本篇文章给大家分享的是有关SNMP相关基本概念是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、网络管理的概念狭义的网络管理仅仅指网络的通信量管理,而广义的网络管理指网络...
        99+
        2023-06-03
      • Flex事件中的基本概念是什么
        这篇文章主要为大家展示了“Flex事件中的基本概念是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Flex事件中的基本概念是什么”这篇文章吧。Flex简介Flex是响应RIA(富客户网络应用...
        99+
        2023-06-17
      • java迭代器的基本概念是什么
        这篇文章主要介绍java迭代器的基本概念是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。本教程操...
        99+
        2023-06-14
      • Nginx的基本概念和原理是什么
        这篇文章将为大家详细讲解有关Nginx的基本概念和原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、Nginx基本概念(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供...
        99+
        2023-06-29
      软考高级职称资格查询
      编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
      • 官方手机版

      • 微信公众号

      • 商务合作