JAVA面试题之AOP

什么是AOP?

AOP(Aspect-Oriented Programming), 即 面向切面编程, 它与
OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与OOP 不同的抽象软件结构的视角. 在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是 Aspect(切面)

那么什么是 Aspect呢?

aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包
括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横切逻辑编织到切面所指定的连接点中. AOP 的工作重心在于如何将增强编织目标对象的连接点上, 这里包含两个工作:
1、如何通过 pointcut 和 advice 定位到特定的 joinpoint 上
2、如何在advice 中编写切面代码.

什么是切点(JoinPoint)

程序运行中的一些时间点, 例如一个方法的执行, 或者是一个异常的处理. 在 Spring AOP 中, join point 总是方法的执行点。

什么是通知(Advice)?

特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice。Spring AOP 使用一个 Advice 作为拦截器,在 JoinPoint “周围”维护一系列的拦截器。

有哪些类型的通知(Advice)?

  1. Before - 这些类型的 Advice 在 joinpoint 方法之前执行,并使用
    @Before 注解标记进行配置。

  2. After Returning - 这些类型的 Advice 在连接点方法正常执行后执
    行,并使用@AfterReturning 注解标记进行配置。

  3. After Throwing - 这些类型的 Advice 仅在 joinpoint 方法通过抛出
    异常退出并使用 @AfterThrowing 注解标记配置时执行。

  4. After (finally) - 这些类型的 Advice 在连接点方法之后执行,无论方
    法退出是正常还是异常返回,并使用 @After 注解标记进行配置。

  5. Around - 这些类型的 Advice 在连接点之前和之后执行,并使用
    @Around 注解标记进行配置。

AOP 有哪些实现方式?

静态代理

指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;
编译时编织(特殊编译器实现)
类加载时编织(特殊的类加载器实现)。

动态代理
在运行时在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。
1. JDK 动态代理
2. CGLIB

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT Talk

谢谢您对我的支持

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

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

打赏作者

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

抵扣说明:

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

余额充值