文档章节

经典Java面试题 ——Spring AOP

博为峰教研组
 博为峰教研组
发布于 2017/04/09 17:44
字数 599
阅读 35
收藏 2

[面试原题]

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。

© 著作权归作者所有

共有 人打赏支持
博为峰教研组
粉丝 50
博文 1224
码字总数 479077
作品 0
黄浦
程序员
私信 提问
【Java学习路线】新手该如何一步步的学习 Java

新手该如何一步步的学习 Java? 如果真的想学Java,最好要循序渐进,有章有法的学习它! 今天小慕就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容。 首先,给大家分享一张以 企业...

Eddie_yang
11/15
0
0
Java高级程序员面试大纲——错过了金三,你还要错过银四吗

跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技术原因(影响自己...

Java高级架构
04/27
0
0
[转载]69道Spring面试题和答案

原文地址 http://ifeve.com/spring-interview-questions-and-answers/ 目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概......

王木东
2017/03/27
0
0
最新蚂蚁金服面试题:Docker+秒杀设计+RocketMQ+亿级数据设计

抓住金九银十的尾高峰,持续更新最新BAT面试题目用于参考。 01 — 蚂蚁金服一面 1 自我介绍 2 讲一下ArrayList和linkedlist的区别,ArrayList的扩容方式,扩容时机。 3 hashmap的实现,以及h...

jamesese
10/25
0
0
Java程序员面试大纲—错过了金三银四,你还要错过2018吗?

跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技术原因(影响自己...

java高级架构牛人
04/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

FinderWeb2.4.9 程序员的看日志利器

FinderWeb2.4.9 程序员的看日志利器 使用方法:管理员登录,分配对应用户的的主机和文件权限即可。 部署方式: 下载并解压到webapps目录即可 http://www.finderweb.net/download/finder-web...

吴伟祥
7分钟前
0
0
PHP的pcntl进程控制教程一(pcntl_fork)

pcntl 简介 PHP的进程控制支持实现了Unix方式的进程创建, 程序执行, 信号处理以及进程的中断。 进程控制不能被应用在Web服务器环境,当其被用于Web服务环境时可能会带来意外的结果。 这份文档...

hansonwong
12分钟前
0
0
php扩展模块安装

11月21日任务 11.32 php扩展模块装安装 /usr/local/php/bin/php -m //查看模块 下面安装一个redis的模块 cd /usr/local/src/ wget https://codeload.github.com/phpredis/phpredis/zip/deve......

zgxlinux
13分钟前
1
0
windows下使用IDEA创建VUE项目

1.环境搭建 1.1检测是否安装好nodejs和npm 检测命令 node -v npm -v 如果没有安装需要先安装 nodejs的下载路径:https://nodejs.org/en/download/ 在Windows上安装时务必选择全部组件,包括勾...

文文1
20分钟前
1
0
Mybatis插件plugin应用测试,替换查询sql

1、新建插件 import org.apache.ibatis.executor.CachingExecutor;import org.apache.ibatis.executor.Executor;import org.apache.ibatis.executor.parameter.ParameterHandler;im......

jcc_codingBoy
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部