Spring-AOP综合代码演示讲解

前言
本篇的Spring-AOP系类文章的最后一篇讲解了spring-AOP的综合代码演示其中包括了基于注解和基于xml二种方式使大家方便理解

个人主页:尘觉主页

个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力

在csdn获奖荣誉: csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣  端午大礼包获得者

欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦

文章目录

  • Spring-AOP综合代码演示讲解
    • 基于注解
      • 创建Cal.java接口
      • 创建MyCal.java
      • 创建MyCalAOP类
      • xml配置
      • 创建测试类
    • 基于xml配置
      • 创建Cal.java接口
      • 创建MyCal.java
      • 创建MyCalAOP类
      • xml配置
      • 创建测试类
    • 总结

Spring-AOP综合代码演示讲解

  1. 请编写一个 Cal 接口

方法 cal1(int n) 计算 1+2…+n
方法 cal2(int n) 计算 1 * 2 * … * n

  1. 实现类 MyCal implements Cal

  2. 请分别使用注解方式 / XML 配置方式 完成 AOP 编程

(1) 在执行 cal1 前打印开始执行的时间,在 执行完后打印时间
(2) 在执行 cal2 前打印开始执行的时间,在 执行完后打印

Spring-AOP综合代码演示讲解_第1张图片

基于注解

创建Cal.java接口

public interface Cal {
    public int cal1(int n);
    public int cal2(int n);
}

创建MyCal.java

@Component //将Cal对象作为组件,注入到Spring容器
public class MyCal implements Cal {
    @Override
    public int cal1(int n) {
        int res = 1;
        for (int i = 1; i <= n; i++) {
            res += i;
        }
        System.out.println("cal1 执行结果=" + res);
        return res;
    }

    @Override
    public int cal2(int n) {
        int res = 1;
        for (int i = 1; i <= n; i++) {
            res *= i;
        }
        System.out.println("cal2 执行结果=" + res);
        return res;
    }
}

创建MyCalAOP类

@Aspect //MyCalAOP 是一个切面类
@Component //MyCalAOP/对象 作为组件注入到spring容器
public class MyCalAOP {

    //前置通知
    //这里注意,如果目标类和切面类,在同一个包,可以省略包名
    //因为cal1和cal2方法,都要去输出开始执行时间,因此使用MyCal.*
    @Before(value = "execution(public int MyCal.*(int))")
    public void calStart(JoinPoint joinPoint) {
        Signature signature = joinPoint.getSignature();
        System.out.println(signature.getName() + " 执行, 开始执行时间=" + System.currentTimeMillis());

    }

    //返回通知
    //这里注意,如果目标类和切面类,在同一个包,可以省略包名
    //因为cal1和cal2方法,都要去输出开始执行时间,因此使用MyCal.*
    @AfterReturning(value = "execution(public int MyCal.*(int))")
    public void calEnd(JoinPoint joinPoint) {
        Signature signature = joinPoint.getSignature();
        System.out.println(signature.getName() + " 执行, 结束时间=" + System.currentTimeMillis());

    }
}

xml配置




    
    

    
    

创建测试类

public class TestMyCalAOP {

    @Test
    public void testMyCalByAnnotation() {

        //得到spring容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("beans10.xml");

        Cal cal = ioc.getBean(Cal.class);

        cal.cal1(10);
        System.out.println("===========");
        cal.cal2(5);
    }
}

基于xml配置

创建Cal.java接口

public interface Cal {
    public int cal1(int n);
    public int cal2(int n);
}

创建MyCal.java

public class MyCal implements Cal {
    @Override
    public int cal1(int n) {
        int res = 1;
        for (int i = 1; i <= n; i++) {
            res += i;
        }
        System.out.println("cal1 执行结果=" + res);
        return res;
    }

    @Override
    public int cal2(int n) {
        int res = 1;
        for (int i = 1; i <= n; i++) {
            res *= i;
        }
        System.out.println("cal2 执行结果=" + res);
        return res;
    }
}

创建MyCalAOP类

public class MyCalAOP {

    //前置通知
    public void calStart(JoinPoint joinPoint) {
        Signature signature = joinPoint.getSignature();
        System.out.println(signature.getName() + " 执行, 开始执行时间=" + System.currentTimeMillis());

    }

    //返回通知
    public void calEnd(JoinPoint joinPoint) {
        Signature signature = joinPoint.getSignature();
        System.out.println(signature.getName() + " 执行, 结束时间=" + System.currentTimeMillis());

    }
}

xml配置




    
    
    
    
    
    
        
        
        
        
            
            
        
    

创建测试类

public class TestMyCalAOP {

    @Test
    public void testMyCalByAnnotation() {

        //得到spring容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("beans11.xml");

        Cal cal = ioc.getBean(Cal.class);

        cal.cal1(10);
        System.out.println("===========");
        cal.cal2(5);
    }
}
``

总结

本篇讲解了spring-AOP的综合代码演示其中包括了基于注解和基于xml二种方式使大家方便理解

Spring-AOP系类文章
第一篇-> Spring-AOP的基本介绍以及通过先动态代理方式实现

第二篇-> Spring-动态代理深入了解

第三篇-> 再次分析-提出 Spring AOP-真正的AOP

第四篇-> spring-aop的切入表达式和JoinPoint的使用以及怎么返回通知获取结果和在异常通知中获取异常还有环绕通知

第五篇-> 演示spring AOP的切入表达式重用和优先级问题以及怎么实现基于xml的AOP

热门专栏推荐
想学习vue的可以看看这个
java基础合集
数据库合集
redis合集
nginx合集
linux合集
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力

你可能感兴趣的:(#,spring,spring,java,后端,错误汇总,PicGo,bug,eclipse)