详解Spring面试AOP

15 篇文章 1 订阅
订阅专栏
AOP是面向切面编程,用于在不修改原代码的情况下增加功能,降低耦合度。它包括连接点、切入点、通知和切面等核心概念。SpringAOP通过代理模式实现,切入点表达式用于匹配方法,通知则是在特定点执行的增强操作。AOP主要解决日志、事务和权限处理等问题。
摘要由CSDN通过智能技术生成

AOP是面向切面编程,是一个设计思想,通过切面技术为业务主体增加额外的通知,从而对声明为切点的代码块进行统一管理和装饰。AOP是OOP的一种补充,利用AOP可以对业务逻辑的各个部分进行隔离,从而降低耦合度,提高程序的可重用性,同时也提高了开发效率。我们可以简单的把 AOP 理解为贯穿于方法之中,在方法执行前、执行时、执行后、返回值后、异常后要执行的操作。

什么是 AOP?

  • AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构。
    • OOP(Object Oriented Programming)面向对象编程(我们都知道OOP是一种编程思想,那么AOP也是一种编程思想,编程思想主要的内容就是指导程序员该如何编写程序,所以它们两个是不同的编程范式。)

AOP作用

  • 作用:在不惊动原始设计的基础上为其进行功能增强,前面咱们有技术就可以实现这样的功能即代理模式

主要解决的问题是:1. 打印日志 2. 事务 3. 权限处理

AOP核心概念(来自黑马程序课程)

为了能更好的理解AOP的相关概念,我们准备了一个环境,整个环境的内容我们暂时可以不用关注,最主要的类为:BookDaoImpl

@Repository
public class BookDaoImpl implements BookDao {
    public void save() {
        //记录程序当前执行执行(开始时间)
        Long startTime = System.currentTimeMillis();
        //业务执行万次
        for (int i = 0;i<10000;i++) {
            System.out.println("book dao save ...");
        }
        //记录程序当前执行时间(结束时间)
        Long endTime = System.currentTimeMillis();
        //计算时间差
        Long totalTime = endTime-startTime;
        //输出信息
        System.out.println("执行万次消耗时间:" + totalTime + "ms");
    }
    public void update(){
        System.out.println("book dao update ...");
    }
    public void delete(){
        System.out.println("book dao delete ...");
    }
    public void select(){
        System.out.println("book dao select ...");
    }
}

代码的内容相信大家都能够读懂,对于save方法中有计算万次执行消耗的时间。

当在App类中从容器中获取bookDao对象后,分别执行其save,delete,updateselect方法后会有如下的打印结果:

在这里插入图片描述

这个时候,我们就应该有些疑问?

  • 对于计算万次执行消耗的时间只有save方法有,为什么delete和update方法也会有呢?
  • delete和update方法有,那什么select方法为什么又没有呢?

这个案例中其实就使用了Spring的AOP,在不惊动(改动)原有设计(代码)的前提下,想给谁添加功能就给谁添加。这个也就是Spring的理念:

  • 无入侵式/无侵入式

说了这么多,Spring到底是如何实现的呢?

在这里插入图片描述

(1)前面一直在强调,Spring的AOP是对一个类的方法在不进行任何修改的前提下实现增强。对于上面的案例中BookServiceImpl中有save,update,deleteselect方法,这些方法我们给起了一个名字叫连接点

(2)在BookServiceImpl的四个方法中,updatedelete只有打印没有计算万次执行消耗时间,但是在运行的时候已经有该功能,那也就是说updatedelete方法都已经被增强,所以对于需要增强的方法我们给起了一个名字叫切入点

(3)执行BookServiceImpl的update和delete方法的时候都被添加了一个计算万次执行消耗时间的功能,将这个功能抽取到一个方法中,换句话说就是存放共性功能的方法,我们给起了个名字叫通知

(4)通知是要增强的内容,会有多个,切入点是需要被增强的方法,也会有多个,那哪个切入点需要添加哪个通知,就需要提前将它们之间的关系描述清楚,那么对于通知和切入点之间的关系描述,我们给起了个名字叫切面

(5)通知是一个方法,方法不能独立存在需要被写在一个类中,这个类我们也给起了个名字叫通知类

至此AOP中的核心概念就已经介绍完了,总结下:

  • 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等
    • 在SpringAOP中,理解为方法的执行
  • 切入点(Pointcut):匹配连接点的式子
    • 在SpringAOP中,一个切入点可以描述一个具体方法,也可也匹配多个方法
      • 一个具体的方法:如com.itheima.dao包下的BookDao接口中的无形参无返回值的save方法
      • 匹配多个方法:所有的save方法,所有的get开头的方法,所有以Dao结尾的接口中的任意方法,所有带有一个参数的方法
    • 连接点范围要比切入点范围大,是切入点的方法也一定是连接点,但是是连接点的方法就不一定要被增强,所以可能不是切入点。
  • 通知(Advice):在切入点处执行的操作,也就是共性功能
    • 在SpringAOP中,功能最终以方法的形式呈现
  • 通知类:定义通知的类
  • 切面(Aspect):描述通知与切入点的对应关系。

AOP 解决了什么问题?

通过上面的分析可以发现,AOP 主要用来解决:在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。

AOP 为什么叫做切面编程?

:指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横切逻辑

:横切逻辑代码往往要影响的是很多个方法,每个方法如同一个点,多个点构成一个面。这里有一个面的概念

总结

AOP的知识就已经讲解完了,接下来对于AOP的知识进行一个总结:

1 AOP的核心概念
  • 概念:AOP(Aspect Oriented Programming)面向切面编程,一种编程范式
  • 作用:在不惊动原始设计的基础上为方法进行功能增强
  • 核心概念
    • 代理(Proxy):SpringAOP的核心本质是采用代理模式实现的
    • 连接点(JoinPoint):在SpringAOP中,理解为任意方法的执行
    • 切入点(Pointcut):匹配连接点的式子,也是具有共性功能的方法描述
    • 通知(Advice):若干个方法的共性功能,在切入点处执行,最终体现为一个方法
    • 切面(Aspect):描述通知与切入点的对应关系
    • 目标对象(Target):被代理的原始对象成为目标对象
2 切入点表达式
  • 切入点表达式标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法名(参数)异常名)

    execution(* com.itheima.service.*Service.*(..))
    
  • 切入点表达式描述通配符:

    • 作用:用于快速描述,范围描述
    • *:匹配任意符号(常用)
    • .. :匹配多个连续的任意符号(常用)
    • +:匹配子类类型
  • 切入点表达式书写技巧

    1.按标准规范开发
    2.查询操作的返回值建议使用*匹配
    3.减少使用…的形式描述包
    4.对接口进行描述,使用*表示模块名,例如UserService的匹配描述为*Service
    5.方法名书写保留动词,例如get,使用*表示名词,例如getById匹配描述为getBy*
    6.参数根据实际情况灵活调整

3 五种通知类型
  • 前置通知(@before)
  • 后置通知(@after)
  • 环绕通知(重点)(@arround)
    • 环绕通知依赖形参ProceedingJoinPoint才能实现对原始方法的调用
    • 环绕通知可以隔离原始方法的调用执行
    • 环绕通知返回值设置为Object类型
    • 环绕通知中可以对原始方法调用过程中出现的异常进行处理
  • 返回后通知(@beforethrowing)
  • 抛出异常后通知(@afterthrowing)
4 通知中获取参数
  • 获取切入点方法的参数,所有的通知类型都可以获取参数
    • JoinPoint:适用于前置、后置、返回后、抛出异常后通知
    • ProceedingJoinPoint:适用于环绕通知
  • 获取切入点方法返回值,前置和抛出异常后通知是没有返回值,后置通知可有可无,所以不做研究
    • 返回后通知
    • 环绕通知
  • 获取切入点方法运行异常信息,前置和返回后通知是不会有,后置通知可有可无,所以不做研究
    • 抛出异常后通知
    • 环绕通知
Spring AOP —— 详解、实现原理、简单demo
CYK_byte的博客
03-05 2562
AOP 就是面向切面的编程, 是一种思想,是对某一类事情的集中处理。
Spring Aop底层原理详解(利用spring后置处理器实现AOP
热门推荐
baomw的博客
11-21 4万+
写在前面:对于一个java程序员来说,相信绝大多数都有这样的面试经历,面试官问:你知道什么是aop吗?谈谈你是怎么理解aop的?等等诸如此类关于aop的问题。当然对于一些小白可能会一脸懵逼;对于一些工作一两年的,可能知道,哦!aop就是面向切面变成,打印日志啊,什么什么的,要是有点学习深度的呢可能会说aop底层实现利用了jdk动态代理,cglib啊什么的。很多时候可能面试就到此打住了,当然,然后也...
Spring AOP 16道面试题及答案.docx
06-29
描述一下Spring AOP? 在Spring AOP中关注点(concern)和横切关注点(cross-cutting concern)有什么不同? AOP有哪些可用的实现? Spring中有哪些不同的通知类型(advice types)? Spring AOP 代理是什么? 引介(Introduction)是什么? 连接点(Joint Point)和切入点(Point Cut)是什么? 织入(Weaving)是什么?
面试问烂的 Spring AOP 原理、SpringMVC 过程(求求你别问了)
weixin_34186128的博客
10-12 8406
Spring AOPSpringMVC ,这两个应该是国内面试必问题,网上有很多答案,其实背背就可以。但今天笔者带大家一起深入浅出源码,看看他的原理。以期让印象更加深刻,面试的时候游刃有余。 Spring AOP 原理 简单说说 AOP 的设计: 每个 Bean 都会被 JDK 或者 Cglib 代理。取决于是否有接口。 每个 Bean 会有多个“方法拦截器”。注意:拦截器分为两层,外层由 ...
Spring 面试题总结
最新发布
m0_68041576的博客
08-21 856
Spring Ioc有三种注入方式:构造注入、Setter注入、属性注入;构造注入:使用构造方法注入bean;Setter注入:使用Setter方法注入bean;属性注入:使用成员属性注入bean,不推荐。原因:使用私有的成员属性变量,依靠反射实现,破坏封装,只能依靠IoC容器实现注入,不严谨;11. Spring中常见的ApplicationContext实现类有哪些?记忆关键字:分别介绍每种实现类或子接口根据项目类路径classpath下的配置文件加载bean。
Java面试--Spring AOP
小刺猬喜歡獨角獸
08-04 5172
(大疆、百度面试题)Spring AOP介绍一下: AOP面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护。
Spring面试AOP相关问题
上善若泪
07-14 1361
文章目录1 Spring AOP简介1.1 Spring AOP的描述1.2 关注点和横切关注点的区别1.3 AOP可用的实现1.4 AOP通知类型1.5 AOP代理的含义1.6 引介(Introduction)1.7 连接点(Joint Point)和切入点(Point cut)1.8 织入(weaving) 1 Spring AOP简介 1.1 Spring AOP的描述 Spring AOP(Aspect Oriented Programming,面向切面编程)是OOP(面向对象编程)的补充,它也提供
Spring AOP 面试宝典:2024美团最全面试题解析!看了必懂,99%的开发者都推荐收藏!
Von_016's Blog
03-28 1316
Spring AOP中,使用自定义注解进行增强处理是一种非常强大和灵活的方式。它允许开发者基于注解来标记需要增强的方法,然后通过AOP拦截这些方法执行自定义逻辑。首先,你需要定义一个注解。例如,定义一个最后,创建一个切面来拦截带有@Aspect@Component// 继续执行方法在这个切面中,使用@Around通知和指示器来匹配所有被注解的方法。当这些方法被调用时,切面会记录并打印出方法的执行时间。
完爆面试官的Spring——AOP详解AOP概览)
m0_68850571的博客
04-09 466
一、对AOP的初印象 首先先给出一段比较专业的术语(来自百度): 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方 式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个 热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑 的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 然后我们举一个比较容易理解
技术面试官:说说你对Spring AOP 的实现机制的理解!
weixin_44174165的博客
04-12 1613
image AOP(Aspect Orient Programming),一般称为面向切面编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。静态代理是编译期实现,动态代理是...
85道Java Spring综合面试详解含答案(值得珍藏)
01-13
了解和掌握这些面试题中的知识点对于准备Java Spring相关职位的面试至关重要。它们不仅涉及Spring的基本概念,还包括其核心特性、模块结构以及设计模式的运用,这些都是评估应聘者技术水平和实际应用能力的关键点。...
springAOP面试
drhrht的博客
08-02 1543
一般称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。...
经典Java面试题 ——Spring AOP
bwf_erg的博客
04-09 2万+
[面试原题] Action类的定义如下: 为该类的actionSomeThing方法定义的切面拦截如下:   请问在执行Action对象的actionSomeThing()时的输出是什么? A. 123456 B. 654321 C. 521643 D.521463 [正确答案] C [面试技术点] Spring AOP定义以及切面执行顺序。 [解读] AOP技术利用
Spring AOP面试题汇总
Jaylon Wang的专栏
01-31 3599
AOP的概念是什么?它解决什么问题? 面向方面的编程(AOP)是某些应用程序的另一种方式,即诸如安全性,日志记录和事务之类的交叉关注点。AOP是针对不同问题的OOP编程的简单补充。在OOP中,模块化的关键单元是类,而在AOP中,模块化的单元是方面。 面向方面的编程(AOP)可以将跨领域关注点模块化,以解决以下问题。 解构 消除散射 遵循应用程序中许多地方所需的通用功能 记录和追踪 交易管...
面试中关于Spring AOP和代理模式的那些事
武哥聊编程
12-09 1万+
我们知道,SpringAOP 是一大核心技术,也是面试中经常会被问到的问题,最近我在网上也看到很多面试题,其中和 Spring AOP 相关的就有不少,这篇文章主要来总结下相关的技术点,希望对大家有用。 0. 几个常见的问题 针对这一块的东西,一般下面几个问题面试官问的比较多: Spring AOP用的是哪种设计模式? 谈谈你对代理模式的理解? 静态代理和动态代理有什么区别? 如何实现动态...
Spring AOP常见面试
m0_69468924的博客
03-11 1598
Spring AOP常见面试
面试题——spring AOP相关
十紫茗的博客
10-24 255
文章目录什么是AOPAOP和代理模式说说你对切面的理解?Spring AOP中什么是通知?Spring AOP中什么是切点?Spring AOP中什么是目标对象?Spring AOP中什么是代理? 什么是AOPAOP (Aspect Oriented Programing) 称为:面向切面编程,它是一种编程思想。在程序运行的时候,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。 基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,对原有业务方法进行增强 ! A
Spring AOP (面试必问)
LOVELYJF的博客
09-19 2322
Spring AOP 切点表达式
Spring MVC经典面试详解Spring AOP与DI应用
面试中关于Spring MVC的经典问题通常涉及其工作原理、使用Spring的主要原因以及与其它框架的整合,如SSH(Struts、Spring、Hibernate)架构。 首先,Spring MVC 的核心是DispatcherServlet,它是所有HTTP请求的入口...
写文章

热门文章

  • 利用“HiFolw”快捷制作高校学生返校名单信息生成 6332
  • 2022年湖南大学计算机专硕866考研经验贴 5917
  • 基于知识图谱的职位推荐系统的设计与实现 5538
  • 一文详细讲解JAVA开发中的XML 4127
  • Floyd最短路径算法(path矩阵递归实现完整路线) 3389

分类专栏

  • 中间件 4篇
  • RocketMQ 1篇
  • 计算机网络 3篇
  • java学习笔记 15篇
  • Leetcode 8篇
  • 经验总结 4篇
  • Tool 1篇
  • Linux 2篇
  • 推荐系统 5篇
  • 后端 3篇
  • 前端 2篇
  • Javascript 笔记 12篇
  • 算法笔记 17篇
  • C++ 4篇
  • MySQL 5篇

最新评论

  • 2022年湖南大学计算机专硕866考研经验贴

    m0_70258681: 学长25毕业了吧,我今年考研加我表情包表情包

  • Floyd最短路径算法(path矩阵递归实现完整路线)

    新的感觉: 我想问一下,真的还有必要找现在mid结点右边还有节点吗,第一次找到的不是已经使最右边的节点了吗?

  • 基于知识图谱的职位推荐系统的设计与实现

    m0_53887366: 求代码 学习一下 谢谢

  • 基于知识图谱的职位推荐系统的设计与实现

    shmilypk: 想学习一下,求源码,谢谢博主!!

  • 基于知识图谱的职位推荐系统的设计与实现

    普通网友: 你好,请问你有了吗

最新文章

  • RocketMQ延迟消费实现的源码解析
  • 本地缓存与分布式缓存
  • 老生常谈 - 从输入URL到页面加载的过程(详细版)
2024年1篇
2023年23篇
2022年34篇
2021年10篇
2020年15篇
2019年6篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RockyBlog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司网站做优化真诚火23星海曙优化网站哪家好荆州网站优化营销案例淄博网站优化网页公司长沙优化网站哪个好延庆网站优化平台优化网站设计gf灬云速捷商丘网站排名优化哪家不错濮阳网站优化单价建设大型网站优化公司好吗哈尔滨有能做网站优化扶沟网站建设优化新乡百度网站优化怎么选罗湖seo网站优化平度市网站seo优化排名昆明网站首页优化资阳网站建设和优化公司bc网站怎么做优化排名网站推广优化设计闵行区360网站优化公司郑东新区网站优化平台网站优化如何入手宣城企业网站排名优化多少钱网站主题模型优化实验步骤宝山区公司官方网站优化定制方案js优化对网站有影响吗网站优化seo求职信邯郸网站搜索优化网站目录优化搜题网站如何优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化