Spring AOP 面试准备

AOP 是通过代理模式中的动态代理实现的

代理模式分为静态代理(AspectJ)、动态代理(JDK代理、GCLib代理)

问题1: 为什么需要代理模式,什么是代理模式?

同生活中的代理,客户需要完成一件事情,但自己无法完成。 需要通过代理拥有的能力来完成这件事。从而代理模式具备了2个特性,对原对象保密性和功能扩展。

问题2: 什么是AOP?

面向切面编程,它是一种编程的思想,它有很多的应用。主流是Spring AOP 和 AspectJ

问题3: 为什么需要AOP?AOP实现哪些功能?

AOP有如下功能:增强原有方法功能(日志、安全),对原有方法无侵入性(对原功能无影响)

日志记录,审计,声明式事务,安全性和缓存等方面的各种常见的的例子

问题4: AOP是怎么实现这些功能?

术语:切面Aspect、加入点Join Point、通知Advice、切入点PointCut、介绍(引用)Introduction、目标对象TargetObject、纺织Weaving

切面Aspect: 代表一个切面类,统一用来处理一类功能

切入点PointCut: 注解在方法上,实现切面的方法或一类方法

加入点JoinPoint: 通知注解的方法的参数,用于获取切面方法的参数内容

介绍(引用)Introduction: 为目标对象,引用(使用)另一个对象的方法,使用@DeclareParents实现

目标对象TargetObject: 切面方法所在的类对象,从JoinPoint.getTarget()获取到类名

通知Advice:监听方法调用,加入业务代码,有以下切入方式 before/after/after-returning/after-throwing/around

纺织Weaving:1、编译期 2 、装载期 3、运行时。使用不同的代理方式产生的区别。 Spring采用了动态代理的方式实现了运行时织入,而AspectJ采用了编译期织入和装载期织入的方式。

问题5: 静态代理、动态代理的区别?

静态代理是在编译时,生成.class文件 动态代理是在运行时,生成.class文件 从而静态代理更快,但静态代理的代理耦合更高

问题6:JDK代理、GCLib代理、AspectJ 的区别? 

JDK代理需要实现接口

GCLib不需要,通过运行生成目标类的父类

AspectJ运行不做任何操作 与 Spring AOP 不同, 它不需要任何设计模式。为了编织代码的各个方面, 它引入了称为 AspectJ 编译器 (ajc) 的编译器, 通过它编译我们的程序, 然后通过提供一个小型 (100K) 运行时库来运行它。

关于源码和实现原理可能不正确地方,谢谢指正

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

时间1024

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

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

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

打赏作者

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

抵扣说明:

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

余额充值