什么是spring aop,请详细的告诉我并给我一个demo(注解版和配置文件版),面试需要从哪方面下手,举个例子给我。

时间: 2024-03-20 20:43:19 浏览: 17
Spring AOP是Spring框架中的一个模块,它是基于AOP(面向切面编程)的思想,提供了在程序运行期间动态地将代码织入到应用程序中的能力,从而实现了对业务逻辑的解耦。 Spring AOP的核心概念是切面(Aspect)、连接点(Join Point)、切点(Pointcut)和通知(Advice)。其中,切面是横切关注点的模块化,连接点是程序执行过程中的一个特定点,切点则定义了连接点的集合,通知则是在连接点上执行的操作。 下面给出注解版和配置文件版的demo代码: 1. 注解版 切面类: ```java @Aspect @Component public class LogAspect { @Pointcut("execution(* com.example.demo.service.*.*(..))") public void log() {} @Before("log()") public void before(JoinPoint joinPoint) { String methodName = joinPoint.getSignature().getName(); System.out.println("Before " + methodName); } @AfterReturning("log()") public void afterReturning(JoinPoint joinPoint) { String methodName = joinPoint.getSignature().getName(); System.out.println("AfterReturning " + methodName); } @AfterThrowing(pointcut = "log()", throwing = "ex") public void afterThrowing(JoinPoint joinPoint, Exception ex) { String methodName = joinPoint.getSignature().getName(); System.out.println("AfterThrowing " + methodName + " " + ex.getMessage()); } @After("log()") public void after(JoinPoint joinPoint) { String methodName = joinPoint.getSignature().getName(); System.out.println("After " + methodName); } } ``` 服务类: ```java @Service public class UserService { public void addUser(String name) { System.out.println("addUser " + name); } public void deleteUser(String name) throws Exception { throw new Exception("deleteUser error"); } } ``` 2. 配置文件版 配置文件: ```xml <aop:config> <aop:aspect ref="logAspect"> <aop:pointcut id="log" expression="execution(* com.example.demo.service.*.*(..))" /> <aop:before pointcut-ref="log" method="before" /> <aop:after-returning pointcut-ref="log" method="afterReturning" /> <aop:after-throwing pointcut-ref="log" method="afterThrowing" throwing="ex" /> <aop:after pointcut-ref="log" method="after" /> </aop:aspect> </aop:config> <bean id="logAspect" class="com.example.demo.aspect.LogAspect" /> <bean id="userService" class="com.example.demo.service.UserService" /> ``` 服务类: ```java public class UserService { public void addUser(String name) { System.out.println("addUser " + name); } public void deleteUser(String name) throws Exception { throw new Exception("deleteUser error"); } } ``` 在面试中,你可以从以下几个方面入手: 1. AOP的基本概念和作用 2. Spring AOP的实现方式 3. 切面、连接点、切点和通知的含义和使用方法 4. AOP的应用场景和优缺点 举例来说,可以问面试者如何使用AOP实现日志记录、权限控制、事务管理等功能,同时也可以让面试者分析AOP的缺点和使用不当可能带来的问题。

相关推荐

最新推荐

recommend-type

Spring AOP + 注解实现统一注解功能

本文我们通过Spring AOP和Java的自定义注解来实现日志的插入功能,非常不错,具有一定的参考借鉴价值,需要的朋友一起看看吧
recommend-type

利用Spring AOP记录方法的执行时间

给大家介绍的是spring的aop来实现方法级的执行时间的记录监控,以此来评估方法的性能以及针对性的对已存在的方法进行优化。对于监控,我们比较关注监控的可靠性和性能,准确,高效,这才能在不影响整体性能的情况下...
recommend-type

Spring AOP执行先后顺序实例详解

主要介绍了Spring AOP执行先后顺序实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
recommend-type

《Spring AOP遇上循环依赖》Spring源码期末考压轴题,真懂的人不多!

再细问:如果循环依赖的时候,所有类又都需要Spring AOP自动代理,那Spring如何提前曝光?曝光的是原始bean还是代理后的bean? 这些问题算是Spring源码的压轴题了,如果这些问题都弄明白,恭喜你顺利结业Spring源码...
recommend-type

Java之Spring AOP 实现用户权限验证

本篇文章主要介绍了Java之Spring AOP 实现用户权限验证,用户登录、权限管理这些是必不可少的业务逻辑,具有一定的参考价值,有兴趣的可以了解一下。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。