SpringAOP 1.X中增强类的实现及织入创建动态代理的对象过程

一、增强实现类织入动态代理类的结构图

在这里插入图片描述

二、创建目标对象(被代理对象)接口及实现目标对象接口

(一) 创建目标对象接口

// TODO: 2021/6/28 建建目标对象接口 
public interface UserInterface {
   

    void showOne();

    void showTwo();
}

(二) 实现目标对象接口

public class UserClass implements UserInterface {
   

    @Override
    public void showOne() {
   
        System.out.println("one");
    }

    @Override
    public void showTwo() {
   
        System.out.println("two");
    }
}

三、实现不同切入点增强类接口

(一) 实现前置增强接口

// TODO: 2021/6/27 前置增强类,用于在代理类中指定的方法前织入增强类中所写的交叉业务逻辑代码
public class BeforeAdvice implements MethodBeforeAdvice {
   
    @Override
    public void before(Method method, Object[] objects, Object o) throws Throwable {
   
        // TODO: 2021/6/27 上面参数中method指的是代理对象调用方法时,目标对象该方法的结构信息
        // TODO: 2021/6/27 下面这段代码将在目标对象被代理该方法执行之前执行
        System.out.println(method.getName() + ":[" + new Date().getTime() + "];在目标对象方法之前执行!");
    }
}

(二) 实现后置增强接口

// TODO: 2021/6/27 后置增强类,用于在代理类中指定的方法织入增强类中所写的交叉业务逻辑代码
public class AfterAdvice implements AfterReturningAdvice {
   
    @Override
    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
   
        System.out.println(method.getName() + ":[" + new Date().getTime() + "];在目标对象方法之后执行!");
    }
}

(三) 实现环绕增强接口

// TODO: 2021/6/27 环绕增强类,用于在代理类中指定的方法前后织入增强类的所写的交叉业务逻辑代码
public class BeforeAndAfterAdvice implements MethodInterceptor {
   
    @Override
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
   
        long startTime = System.currentTimeMillis();
        System.out.println("这是增强类织入在目标对象方法前的代码,2秒后执行目标对象的方法");
        Thread.sleep(2000);

        // TODO: 2021/6/27 下面这段代码是环绕织入的分界线,在他上面的代码先执行,再执行目标对象的方法,在他下面的后执行
        Object proceed = methodInvocation.proceed();

        System.out.println("这是增强类织入在目标对象方法后的代码,2秒后将结束,并显示总共执行的时间段");
        Thread.sleep(2000);
        long endTime = System.currentTimeMillis();
        System.out.println("执行完毕总共用时为:" + (endTime - startTime));

        // TODO: 2021/6/27 返回对象
        return proceed;
    }
}

(四) 实现异常增强接口

// TODO: 2021/6/27 异常增强类,用于被代理对象(目标对象)方法被代理时,发生异常,将增强代码织入到指定的方法中
public class ExceptionAdvice implements 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值