面试题: Spring AOP是如何实现的? 它和AspectJ有什么区别?

本文探讨了SpringAOP如何利用动态代理(JDK与CGLIB)实现AOP,并指出其与AspectJ的区别,后者是编译期增强,而SpringAOP主要通过Spring框架支持AspectJ的注解进行实现。
摘要由CSDN通过智能技术生成

Spring AOP是如何实现的? 它和AspectJ有什么区别?

背景

想换工作, 学习一下面试题, 算是学习记录的输出.

答案

SpringAOP实现

Spring AOP 是利用的动态代理的机制, 如果一个Bean 实现了接口, 那么就会采用JDK动态代理来生成接口的代理对象, 如果一个Bean 没有实现接口, 那么就会采用CGLIB 来生成当前类的一个代理对象. 代理对象的作用就是代理原来的Bean 对象, 代理对象在执行某个方法时, 会在该方法的基础上增加一些切面逻辑, 使得我们可以利用AOP 来实现一些诸如登录校验, 权限控制, 日志记录等统一功能.

与AspectJ区别

Spring AOP 和 AspectJ 之间没有特别强的关系, AOP 表示面向切面编程, 这是一种思想, 各个组织或个人通过自己的技术来实现这种思想, AspectJ 就是其中之一, 它会在编译期对类进行增强, 所以要用AspectJ, 得用AspectJ 开发的编译器来编译你的项目. 而Spring AOP则是采用动态代理实现AOP, 只不过觉得AspectJ 中设计的那几个注解比较好, 比如: @Before, @After, @Around等, 同事也不给程序员带来困扰, 所以Spring AOP中对这几个注解进行了支持, 虽然注解是相同的, 但是底层的实现逻辑是完全不同的.

AOP 的几种实现方案

在这里插入图片描述

个人评价

2023年10月6日13:32:14
老师的答案已经很好了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值