经典Java面试题 ——Spring AOP
经典Java面试题 ——Spring AOP
博为峰教研组 发表于6个月前
经典Java面试题 ——Spring AOP
  • 发表于 6个月前
  • 阅读 22
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

[面试原题]

Action类的定义如下:

为该类的actionSomeThing方法定义的切面拦截如下:

请问在执行Action对象的actionSomeThing()时的输出是什么?

A. 123456 B. 654321 C. 521643 D.521463

[正确答案]

C

[面试技术点]

Spring AOP定义以及切面执行顺序。

[解读]

AOP技术利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

本例中@Pointcut("execution(* com.bwf.web.Action*.*(..))")定了一个切入点,正则表达式的意思是在执行com.bwf.web.Action类的所有方法时,将会发送performance切入点通知。

@Before是在所拦截方法执行之前执行一段逻辑。

@After 是在所拦截方法执行之后执行一段逻辑。

@Around是可以同时在所拦截方法的前后执行一段逻辑。

@AfterReturning在所拦截方法return后执行该注解的函数。

 

本例中,首先要执行的是@Around注解的函数,所以,先打印5。obj = joinpoint.proceed();调用的就是Action中的actionSomeThing函数本身。那么在执行actionSomeThing函数前,首先要执行@Before注解函数,因此,再打印2。之后是performance函数执行,打印1,接下来执行around的最后一步输出,打印6。然后拦截函数执行完毕,调用@After注解函数,打印4。最后拦截函数return后,执行@AfterReturn注解函数,打印3。

标签: java spring AOP
共有 人打赏支持
粉丝 40
博文 1224
码字总数 479077
×
博为峰教研组
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: