前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >spring aop原理面试题[高并发面试题]

spring aop原理面试题[高并发面试题]

作者头像
Java架构师必看
发布于 2022-02-20 23:58:17
发布于 2022-02-20 23:58:17
3.6K00
代码可运行
举报
文章被收录于专栏:Java架构师必看Java架构师必看
运行总次数:0
代码可运行

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说spring aop原理面试题[高并发面试题],希望能够帮助大家进步!!!

一、面试官问:AOP是什么?

与OOP对比,面向切面,传统的OOP开发中的代码逻辑是至上而下的过程中会长生一些横切性问题,这些横切性的问题和我们的主业务逻辑关系不会散落在代码的各个地方,造成难以维护,AOP的编程思想就是把业务逻辑和横切的问题进行分离,从而达到解耦的目的,使代码的重用性和开发效率高(目的是重用代码,把公共的代码抽取出来)

二、面试官问:AOP的应用场景有哪些呢?

1、日志记录

2、权限验证

3、效率检查(个人在代码上,喜欢用注解+切面,实现校验,redis分布式锁等功能)

4、事务管理(spring 的事务就是用AOP实现的)

三、面试官问:springAop的底层是怎样实现的?

(这个时候,条件反射地想起这两点)

1、JDK动态代理

2、CGLIB代理

面试官一问:是编译时期进行织入,还是运行期进行织入?

---->运行期,生成字节码,再加载到虚拟机中,JDK是利用反射原理,CGLIB使用了ASM原理。

面试官再问:初始化时期织入还是获取对象时织入?

----》初始化的时候,已经将目标对象进行代理,放入到spring 容器

面试官再再问:spring AOP 默认使用jdk动态代理还是cglib?

-----》要看条件,如果实现了接口的类,是使用jdk。如果没实现接口,就使用cglib。

(来一个尴尬的笑容,有点忘记了,内心,直接泪目)

四、面试官问:spring AOP 和 AspectJ的关系?

1、两者都是为了实现AOP这个目的,而出现的技术,spring aop 参考 AspectJ编程风格

---》这里有个故事就是,原本spring aop 初期的时候所用的编程风格,让人用起来,很不方便,而且让人看不懂。后来,spring aop 就开始取用了Aspectj的编程风格去进行编程

这里有一个小彩蛋(如果知道,请跳过),搭建一个用上spring,但是不使用xml文件,而且将bean注入到容器中,而且能从容器中拿出来的项目。

第一步骤:加入spring-context依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.8.RELEASE</version>
    </dependency>

只听到从架构师办公室传来架构君的声音:

看燕燕,送归妾。有谁来对上联或下联?

第二步骤:加入三个类,一个测试类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
此代码由Java架构师必看网-架构君整理
@Configuration
@ComponentScan("com.ving")
public class AopConfig {
}

////////////////////////////////////////////////


@Component
public class IndexDao {

    public void query(){
        System.out.println("dao----query");
    }
}

////////////////////////////////////////////////

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(AopConfig.class);
        annotationConfigApplicationContext.start();
         IndexDao bean = annotationConfigApplicationContext.getBean(IndexDao.class);
        bean.query();

    }
}

////////////////////////////////////////////////

打印的结果为:

十二月 16, 2019 8:58:38 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6438a396: startup date [Mon Dec 16 20:58:38 CST 2019]; root of context hierarchy
dao----query

我们继续往下看

面试官最后一问:能不能简单说下AOP中的切面、切点、连接点、通知,四者的关系?

aspect 切面

Point cut (如果理解了这个切点的概念,就在应用方面完全是可以的了)表示连接点的集合(类似一个表)

Join point 目标对象中的方法(每一条记录)

weaving 把代理逻辑加入到目标对象上的过程叫做织入

advice 通知类型,请下下图官网说明

下面代码是说明切面,切点,连接点,通知,四者的关系!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 *
 * 切面
 * 一定要给spring 管理
 */
@Component
@Aspect
public class VingAspectJ {

    /**
     * 切点
     * 为什么切点要声明在一个方法上?目的是为了将注解写在上面而已
     * pointcut是连接点的集合(就是方法的集合)
     */
    @Pointcut("execution(* com.ving.dao.*.*(..))")
    public void pointCut(){

    }

    /**
     * 通知---》配置切点
     */
    @After("com.ving.config.VingAspectJ.pointCut()")
    public void after(){
        System.out.println("after");
    }

    @Before("com.ving.config.VingAspectJ.pointCut()")
    public void before(){
        System.out.println("before");
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring AOP介绍(一)之 Spring AOP 基础介绍
AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。与OOP对比,AOP面向切面,传统的OOP开发中,代码逻辑是自上而下的,在这些自上而下的过程中,会产生一些横切性的问题,这些横切性的问题和我们的主业务逻辑关系不大,会散落在代码的各个地方,造成难以维护,AOP的变成思想就是把业务逻辑和横切的问题进行分离,从而达到解耦的目的,提到代码的可重用性与开发效率。
zoro
2019/04/11
1.5K0
Spring AOP介绍(一)之 Spring AOP 基础介绍
强悍的Spring之AOP使用
Spring中使用注解方式实现AOP,采用@AspectJ方式实现,首先确定需要切入的方法,也就是连接点
你呀不牛
2021/05/28
6230
Java必考面试题,谈谈你对 Spring AOP 的理解
Spring AOP 是 Java 程序员们面试经常被问到的一个问题,但 AOP(Aspect-Oriented Programming)其实是一种编程范式,用于在程序运行期间将横切关注点(Cross-cutting Concerns)与核心业务逻辑分离开来,并不只是在 Spring 中使用。
伍六七AI编程
2023/12/07
5880
Java必考面试题,谈谈你对 Spring AOP 的理解
Spring AOP
Spring 提供了两种方式来生成代理对象: JDKProxy 和 Cglib,具体使用哪种方式生成由AopProxyFactory 根据 AdvisedSupport 对象的配置来决定。默认的策略是如果目标类是接口,则使用 JDK 动态代理技术,否则使用 Cglib 来生成代理。
红目香薰
2022/11/29
3190
熬夜整理的52道Spring经典面试题
BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。
小熊学Java
2023/07/16
3440
熬夜整理的52道Spring经典面试题
Spring AOP
Spring AOP 使用场景蛮多的属性检查、日志等,所有拦截下来可以在切面共同做的事儿似乎都可以用AOP(面向切面)的方式解决。在面试的过程中AOP 也是除Ioc及MVC 以外问的较多的一个点,通常是这样的: AOP 是什么?面向切面编程。 Spring AOP 是如何实现的? 配置下拦截器,完成具体的处理逻辑,其实本质就是一个动态代理。 那Spring 实现动态代理的方式有哪些?CGLib、JDK 原生 那这两种方式默认使用哪一种,如何指配?#&@¥&@¥&@#¥& 那JDK 原生方式与CGlib 区别说一下?&&#¥#¥ 提到了CGlib的实现是ASM,那ASM 具体的原理是怎样的?#&@¥&@¥&@#¥& 说一下ASM 几个核心的函数?#&@¥&@¥&@#¥& 说一下ASM 操作的过程中,JVM 里都发生了哪些事儿?#&@¥&@¥&*@#¥& 刚才说了这么多反射还有JVM 相关的,如果使用反射的方式向一个List<String> ,插入一个Integer,是正常还是Error,为什么? 好的,咱来谈谈泛型的擦除。所以会很容易被转移话题的。 其实AOP 相对于具体语言的实现细节,最主要的是它的实现思想。 先说一下思想: AOP 面向切面编程,算是对oop 面向对象编程的一种补充,指的在许多流程中都存在某些点需要做类似的事儿,可以将这个点设置为横切关注点(相对的业务处理的是核心关注点),完后完成对应事件的设定。 这种场景比如说权限检查、日志等。。 要理解整个AOP 过程还需要一点关键词: 横切关注点: 具体需要拦截的点,一种发现的过程 切面(aspect): 对横切关注点的一种抽象,一种抽象的过程 连接点(joinpoint):要被拦截到的具体点 切入点(pointcut):对于连接点进行,一种设置拦截定义的过程 通知(advice):具体就是指的拦截到具体的连接点之后的要执行的逻辑代码,分为:前置、后置、最终、环绕 这五类通知 目标对象:代理的目标对象 织入(weave):将切面应用到目标对象,并创建对应对象代理创建的过程 引入(introduction):动态代理运行的过程 然后是AOP 后续具体的使用细节及实现原理: 使用过程大体是这样的: 1、检查业务组件,查看是否存在大量可横切点 2、定义切入点 3、定义增强处理,就是切入点前后的具体通知 4、设置完成,实现对应AOP 操作 Spring 对AOP 的支持是建立在Ioc 的基础上的,也就是AOP 代理有Ioc 容器负责处理依赖关系,及其生成和管理。 那么Spring AOP 所依赖的Ioc 里面使用代理的方式是默认使用JDK 原生方式,也可以选配CGlib实现。 在使用层面上,JDK 要求实现接口,而CGlib 不用,可以基于类实现。 JDK 是根据接口实现一个具体的class 对象然后加载到具体的堆和方法区完成的实现。 CGlib 是依赖于ASM ,通过字节码操作根据现有的类,通过添加字节码的方式构建一个新的对应类的子类来完成对应的实现。 就当前阶段来说两者在小规模调用差异基本是不大的,当前hibernate 用的就是ASM 方式实现的懒加载。
邹志全
2019/10/08
4720
Spring源码阅读系列之一:Spring AOP原理(上)
本文是Spring原理分析的第一篇博文,主要阐述Spring AOP相关概念,同时从源码层面分析AOP实现原理。对于AOP原理的理解有利于加深对Spring框架的深入理解。同时我也希望可以探究Spring框架在处理AOP的解决思路,学习框架的时候,有时候需要站在设计者的角度上去考虑,如果自己是设计者遇到同样需要解决的问题自己会怎么去处理,然后再对照实际框架中的处理方式,这样可以发现自己考虑不足之处。 本文侧重于找到Spring框架处理AOP的起点,至于涉及到的动态代理相关的问题将在下一篇文中着重介绍。
慕枫技术笔记
2023/03/20
2630
Spring源码阅读系列之一:Spring AOP原理(上)
比较Spring AOP与AspectJ
本文翻译自Comparing Spring AOP and AspectJ(http://www.baeldung.com/spring-aop-vs-aspectj) 介绍 如今有多个可用的AOP库,这些组件需要回答一系列的问题: 是否与我现有的应用兼容? 我在哪实现AOP? 集成到我的应用是否很快? 性能开销是多少? 本文中,我们将会着重回答这些问题,并介绍两款Java最流行的AOP框架:Spring AOP 和 AspectJ。 AOP概念 在我们开始之前,让我们对术语和核心概念做一个快速,高水平的回
aoho求索
2018/04/03
1.6K0
比较Spring AOP与AspectJ
Spring学习总结(三)——Spring实现AOP的多种方式
AOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的横向多模块统一控制的一种技术。AOP是OOP的补充,是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP可以分为静态织入与动态织入,静态织入即在编译前将需织入内容写入目标模块中,这样成本非常高。动态织入则不需要改变目标模块。Spring框架实现了AOP,使用注解配置完成AOP比使用XML配置要更加方便与直观。上一篇随笔中已经详细讲了代理模式。
张果
2022/05/09
4690
Spring学习总结(三)——Spring实现AOP的多种方式
Spring源码学习 | Spring AOP基本概念
网上关于Spring AOP的文章不少,但大都千篇一律,复制粘贴一把梭。对着源码夸夸其谈,但是一些基础的概念却没怎么解释。很多概念、关系描述不清,含糊其辞。可谓以其昏昏,使人昭昭。
玖柒的小窝
2021/10/25
2280
Spring源码学习 | Spring AOP基本概念
系统学习SpringFramework:Spring AOP
AOP(Aspect oriented programming),即面向切面编程,它是一个编程范式,是 OOP(面向对象编程)的一种延续,目的就是提高代码的模块性。
栗筝i
2022/12/01
2810
Spring AOP(一) AOP基本概念
AOP全名Aspect-oriented programming面向切面编程大法,它有很多兄弟,分别是经常见的面向对象编程,朴素的面向过程编程和神秘的函数式编程等。所谓AOP的具体解释,以及和OOP的区别不清楚的同学可以自行去了解。
宁在春
2022/10/31
3310
Spring AOP(一) AOP基本概念
【Spring源码】- 10 Spring AOP核心API
Spring的两大核心:IoC和AOP,IoC作为Spring的根基,通过大量的扩展点让系统轻而易举的就可以实现良好的扩展性,而AOP和IoC结合在一起,类似于发生强大化学反应一样,将Spring的功能性又提高了一个层次。Spring中也有大量使用AOP场景,比如@Configuration、数据库事务、mybatis mapper接口注入等等。
Reactor2020
2023/03/22
2940
【Spring源码】- 10  Spring AOP核心API
Spring系列六:AOP概念和使用
AOP:面向切面编程。简单说,就是把一些业务逻辑中的相同的代码抽取到一个独立的模块中,让业务逻辑更加清爽。
叶秋学长
2022/07/27
2990
Spring系列六:AOP概念和使用
深入浅出Spring AOP:让你的代码更优雅
在现代Java开发中,Spring框架几乎是无处不在的。作为Spring框架的一部分,Spring AOP(面向切面编程)提供了一种强大且灵活的方式来处理横切关注点,比如日志记录、安全检查、事务管理等。如果你还没有完全掌握Spring AOP,那么这篇文章将带你深入了解它的工作原理和应用场景。
AI码师
2024/05/27
1.3K0
深入浅出Spring AOP:让你的代码更优雅
Spring AOP 是怎么运行的?彻底搞定这道面试必考题
其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, 含义总有着各种莫名其妙的差别. 鉴于此, 我在本章的开头, 着重为为大家介绍一个 Spring AOP 的各项术语的基本含义. 为了术语传达的准确性, 我在接下来的叙述中, 能使用英文术语的地方, 尽量使用英文。
南风
2020/02/17
4.8K0
spring boot使用Jedis整合Redis实现缓存(AOP)
使用redis做缓存的话,需要有redis服务,可以将服务部署在远程服务器上,也可以部署到本机上。
洋仔聊编程
2019/01/15
1.9K0
Spring的AOP面向切面 知识点速查
通过实现BeanPostProcessor接口的postProcessBeforeInitialization和postProcessAfterInitialization方法,在初始化前后用代理对象加强原来的类
linxinzhe
2018/07/25
5580
逐行阅读Spring5.X源码(十一)AOP概念、应用、原理
与OOP对比,面向切面,传统的OOP开发中的代码逻辑是自上而下的,而这些过程会产生一些横切性问题,这些横切性的问题和我们的主业务逻辑关系不大,这些横切性问题不会影响到主逻辑实现的,但是会散落到代码的各个部分,难以维护。AOP是处理一些横切性问题,AOP的编程思想就是把这些问题和主业务逻辑分开,达到与主业务逻辑解耦的目的。使代码的重用性和开发效率更高。
源码之路
2020/09/04
9080
逐行阅读Spring5.X源码(十一)AOP概念、应用、原理
【Spring学习】AOP实现日志记录
AOP,面向切面编程。通过预编译方式和运行时动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
pbinlog
2022/03/21
7020
【Spring学习】AOP实现日志记录
相关推荐
Spring AOP介绍(一)之 Spring AOP 基础介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验