博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring AOP基础
阅读量:3971 次
发布时间:2019-05-24

本文共 2953 字,大约阅读时间需要 9 分钟。

目录

一、采用配置方式使用AOP

1、在net.zjs.spring包里创建lesson05.aop_xml子包

在这里插入图片描述

2、在aop_xml子包里创建杀龙任务类 - SlayDragonQuest

在这里插入图片描述

3、在aop_xml子包里创建勇敢骑士类 - BraveKnight

在这里插入图片描述

4、在aop_xml子包里创建游吟诗人类 - Minstrel

在这里插入图片描述

5、在pom文件里添加AOP相关依赖

在这里插入图片描述

  • 注意:添加依赖后,一定要点击按钮更新
    在这里插入图片描述

6、创建Spring配置文件

(1) 在resources里创建aop_xml目录,在里面创建spring-config.xml配置文件

在这里插入图片描述

在这里插入图片描述

(2) 编写组件扫描

在这里插入图片描述

(3) 在AOP配置里面定义切面

在这里插入图片描述

(4) 定义切点

  • 什么是切点?
    在使用Spring框架配置AOP时,不管是通过XML配置文件还是注解方式,都需要定义pointcut(切点)。

(5) 切点表达式

定义切点表达式expression=“execution(* net.hw.spring.lesson05…*.embarkOnQuest(…))”

在这里插入图片描述

(6)切换函数

execution()是最常用的切点函数,整个表达式可以分为五个部分。

  • execution():表达式主体。
  • 第一个*号:表示返回类型,*号表示所有的类型。
  • 包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,net.hw.spring包、子孙包下所有类的方法。
  • 第二个*号:表示类名,*号表示所有的类。
  • *(…):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。

在这里插入图片描述

(7)声明前置通知

在这里插入图片描述

(8) 声明后置通知

在这里插入图片描述

7、创建测试类 —— TestKnight

  • 在test/java里创建net.zjs.spring.lesson05.aop_xml包,在包里创建TestKnight
    在这里插入图片描述

8、运行测试方法testBraveKnight(),查看结果

在这里插入图片描述

  • 将spring-config.xml中的删除即可
    在这里插入图片描述
  • 再次运行,查看结果

在这里插入图片描述

9、在lesson05.aop_xml子包中增加救美任务类与救美骑士类

在这里插入图片描述

(1)救美骑士类

在这里插入图片描述

(2)救美任务类

在这里插入图片描述

10、在测试类里增加测试方法 - testDamselRescuingKnight()

在这里插入图片描述

11、运行测试方法——testDamselRescuingKnight()

在这里插入图片描述

二、采用注解方式使用AOP

1、在net.hw.spring包里创建lesson05.aop_annotation子包

在这里插入图片描述

2、将aop_xml子包中SlayDragonQuest(杀龙任务类)拷贝到aop_annotantion子包中

在这里插入图片描述

3、 将aop_xml子包中BraveKnight(勇敢骑士类)拷贝到aop_annotantion子包中

在这里插入图片描述

4、在aop_annotation子包里创建注解接口 - Action

  • 此接口是要完成配置文件的作用
    在这里插入图片描述

(1)拦截目标——方法

  • @Target({ElementType.TYPE}) 注解
  • ElementType 这个枚举类型的常量提供了一个简单的分类:注解可能出现在Java程序中的语法位置(这些常量与元注解类型(@Target)一起指定在何处写入注解的合法位置)
    在这里插入图片描述

(2)保持策略——运行时

  • @Retention({RetentionPolicy.Runtime}) 注解
  • RetentionPolicy这个枚举类型的常量描述保留注解的各种策略,它们与元注解(@Retention)一起指定注释要保留多长时间
    在这里插入图片描述

(3)注解文档化

  • @Documented注解
  • Documented注解表明这个注解是由 javadoc记录的,在默认情况下也有类似的记录工具。 如果一个类型声明被注解了文档化,它的注解成为公共API的一部分。
    在这里插入图片描述

在这里插入图片描述

5、创建游吟诗人切面类(MinstrelAspect)

在这里插入图片描述

  • 取代spring-config.xml中的AOP配置
    在这里插入图片描述

6、在aop_annotation子包里创建Spring配置类 - AopConfig

在这里插入图片描述

在这里插入图片描述

7、创建骑士测试类

(1)在lesson05子包中创建aop_annotation以及TestKnight测试类

在这里插入图片描述

(2)运行骑士测试类

  • 出现找不到Mike这个名字的错误
    在这里插入图片描述
  • 子包aop_annotation中的勇敢骑士类包导入错误,删掉即可
    在这里插入图片描述
  • 再次运行骑士测试类
    在这里插入图片描述

三、课堂练习

1、增加救美任务类

在这里插入图片描述

2、增加救美骑士类

在这里插入图片描述

3、在测试类里增加测试方法 - testDamselRescuingKnight()

在这里插入图片描述

  • 运行测试方法,查看结果

在这里插入图片描述

4、运行测试类,查看测试结果

在这里插入图片描述

四、实现注解式拦截

1、修改勇敢骑士类,给embarkOnQuest()添加自定义注解Action,并设置name属性

在这里插入图片描述

  • name可随意取
    在这里插入图片描述

2、修改游吟诗人( MinstrelAspect)

  • 注:定义切点的方式发生改变
    在这里插入图片描述
    在这里插入图片描述

3、运行TestKnight类中的testBraveKnight测试方法,查看结果

在这里插入图片描述

4、修改救美骑士类,给embarkOnQuest()添加自定义注解Action

在这里插入图片描述

5、运行测试方法testDamselRescuingKnight(),查看效果

在这里插入图片描述

五、课后作业

任务:输出骑士完成任务的耗时

1、在aop_annnotation子包中创建耗时切面类 (ElapseAspect)

在这里插入图片描述

在这里插入图片描述

2、运行测试类,查看效果

在这里插入图片描述

  • System.currentTimeMillis()计算方式

    在开发过程中,通常很多人都习惯使用new Date()来获取当前时间。new Date()所做的事情其实就是调用了System.currentTimeMillis()。如果仅仅是需要或者毫秒数,那么完全可以使用System.currentTimeMillis()去代替new Date(),效率上会高一点。如果需要在同一个方法里面多次使用new Date(),通常性能就是这样一点一点地消耗掉,这里其实可以声明一个引用。

  • 使用方法

    //获得系统的时间,单位为毫秒,转换为妙  long totalMilliSeconds = System.currentTimeMillis();  long totalSeconds = totalMilliSeconds / 1000;     //求出现在的秒  long currentSecond = totalSeconds % 60;     //求出现在的分  long totalMinutes = totalSeconds / 60;  long currentMinute = totalMinutes % 60;     //求出现在的小时  long totalHour = totalMinutes / 60;  long currentHour = totalHour % 24;     //显示时间  System.out.println("总毫秒为: " + totalMilliSeconds);  System.out.println(currentHour + ":" + currentMinute + ":" + currentSecond + " GMT");

转载地址:http://kntki.baihongyu.com/

你可能感兴趣的文章
Spring Batch 核心概念
查看>>
Spring Batch 例子: 导入定长文件到数据库
查看>>
正则表达式
查看>>
Java I/O
查看>>
序列化
查看>>
Perl 精萃
查看>>
Perl 简介
查看>>
Perl 注释
查看>>
数据类型之标量
查看>>
调试 Perl 脚本
查看>>
增强的for循环语句
查看>>
静态导入
查看>>
java 泛型
查看>>
控制结构
查看>>
标准输入输出
查看>>
数据类型之列表与数组
查看>>
比较字符串
查看>>
Java EE 精萃
查看>>
Open Source 精萃
查看>>
Java EE 简介
查看>>