面试:解释一下什么是AOP

面试:解释一下什么是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中用到了动态代理在面试当中点出来这样更好,两种动态代理在我上一篇博客中,有需要的可以看一看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值