面试:解释一下什么是AOP

您所在的位置:网站首页 竟是什么意思解释一下怎么写 面试:解释一下什么是AOP

面试:解释一下什么是AOP

2024-06-23 20:13| 来源: 网络整理| 查看: 265

面试:解释一下什么是AOP

在java面试过程中SSM是必修课(Spring,SpringMVC,MyBatis),而Spring中AOP就是一个面试高频考点,他是Spring特性之一即为面向切面编程。很多人当看到AOP叫面向切面编程,脑子中第一反应这是什么玩应,这么抽象,下面我就举一个小例子为大家解释一下。

打个比方我们正在做一个银行之类的项目,比如存钱、取钱加上手续费就是这个项目的核心代码 而存钱取钱还有手续费的扣除这些业务功能可以说是同步的,在这里我们可以加上一些事务,取钱不成功的话 就让事务回滚,以至于不能出现钱取出来而余额没有扣除。所以每个核心代码都要加上事务功能,这就造成了代码重复问题 所以这里我们就可以用上aop,提高开发效率。

而aop就会涉及到一些概念:

1、切面(Aspect):就是共有功能的实现,比如加上日志切面,事务切面,就是一个java的类

@Aspect //在类的上面加上这个注解在有Spring容器管理代表他就是切面类 public class Log {

2、通知(Advice):就是切面的具体表现,可以放在不同的位置,通俗点说就是把通知(也就是事务)加入你想的业务代码上

//前置通知 @Before(value = "execution(* com.ma.mapper.*.*(..))") public static void Before() { System.out.println("前置方法。。。"); } //后置通知(最终通知) @After(value = "execution(* com.ma.mapper.*.*(..))") public static void After() { System.out.println("后置方法"); } //返回通知 returning:指定返回参数 @AfterReturning(returning = "res",value = "execution(* com.ma.mapper.*.*(..))") public static void afterReturning(Object res) { System.out.println("有返回值的方法..."+"返回值是="+res); } //异常通知:有异常是执行 @AfterThrowing(value = "execution(* com.ma.mapper.*.*(..))") public static void afterThrowing() { System.out.println("异常的方法..."); } //环绕通知:根据切入点的具体方法是否有返回值来确定环绕通知是否有返回值 @Around(value = "execution(* com.ma.mapper.*.*(..))") public static Object Around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { System.out.println("环绕通知前..."); //执行目标方法 Object proceed = proceedingJoinPoint.proceed(); System.out.println("环绕通知后..."); return proceed; }

3、连接点(Joinpoint):是程序在运行过程中能够插入切面的地点

4、切入点(Pointcut):用于定义通知应该切入到那些连接点上,不同的通知能切入到不同的点,通俗点说就是把通知(也就是事务)加入你想的业务代码上

//切入点表达式的语法结构是: execution( 方法访问权限 方法返回值 包名+类名+方法名(参数类型列表) ) @Around(value = "execution(* com.ma.mapper.*.*(..))")

5、目标对象:被加入通知的对象,这些对象中只有干干净净的核心代码了

6、代理对象:通知加入对象之后动态创建的对象

7、织入:就是把切面类加入到目标对象所创建新代理对象的过程就是织入

而上述的代码是解释aop的术语,当然面试的时候把aop概念用一些举例来表达出来,融汇贯通这样更好。我们的aop中用到了动态代理在面试当中点出来这样更好,两种动态代理在我上一篇博客中,有需要的可以看一看。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3