Java企业开发学习笔记(5下)采用注解方式使用AOP

news2024/9/22 3:42:28

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/FBkpc】

文章目录

  • 二、采用注解方式使用AOP
    • 2.1 创建所需自包
    • 2.2 创建杀龙任务
    • 2.3 创建勇敢骑士类
    • 2.4 创建吟游诗人切面
    • 2.5 创建Spring配置类
    • 2.6 创建骑士测试类
    • 2.7 运行测试方法testBraveKnight(),查看效果
    • 2.8 课堂练习
      • 2.8.1 增加救美任务类与救美骑士类
      • 2.8.2 在测试类里增救美骑士测试类
      • 2.8.3 运行testDamselRescuingKnight()方法,查看结果
  • 三、 实现注解式拦截
    • 3.1 创建注解接口
    • 3.2 修改勇敢骑士类
    • 3.3 修改游吟诗人切面
    • 3.4 运行测试方法testBraveKnight(), 查看效果
    • 3.5 修改救美骑士类,给embarkOnQuest()添加自定义注解Action
    • 3.6 运行测试方法testDamselRescuingKnight(),查看效果
    • 3.7 练习


二、采用注解方式使用AOP

2.1 创建所需自包

  • cn.kox.spring包里创建day05.aop_annotation子包
    在这里插入图片描述

2.2 创建杀龙任务

  • aop_annotation子包里创建杀龙任务类 - SlayDragonQuest
    在这里插入图片描述
package cn.kox.spring.day05.aop_annotation;

import org.springframework.stereotype.Component;

/*
* 杀龙任务类
* */

@Component
public class SlayDragonQuest {
    public void embark() {
        System.out.println("执行杀龙任务。");
    }
}

2.3 创建勇敢骑士类

  • aop_annotation子包里创建勇敢骑士类 - BraveKnight
    在这里插入图片描述
package cn.kox.spring.day05.aop_annotation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/*
* 勇敢骑士类
* */

@Component("Mike")
public class BraveKnight {
    @Autowired
    private SlayDragonQuest slayDragonQuest;

    public void embarkOnQuest() {
        slayDragonQuest.embark();
    }
}

2.4 创建吟游诗人切面

  • aop_annotation子包里创建游吟诗人切面 - MinstrelAspect
    在这里插入图片描述
package cn.kox.spring.day05.aop_annotation;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/*
* 吟游诗人切片类
* */

@Aspect // 声明为切面
@Component // 交给Spring容器管理
public class MinstrelAspect {
    // 注解声明切点
    @Pointcut("execution(* cn.kox.spring..*.embarkOnQuest(..))")
    public void embark() {
    }

    // 注解声明前置通知
    @Before("embark()")
    public void singBeforeQuest(JoinPoint joinPoint) {
        System.out.println("啦啦啦,骑士出发了!");
    }

    // 注解声明后置通知
    @After("embark()")
    public void singAfterQuest(JoinPoint joinPoint) {
        System.out.println("真棒啊!骑士完成了任务!");
    }
}

2.5 创建Spring配置类

  • aop_annotation子包里创建Spring配置类 - AopConfig
    在这里插入图片描述
package cn.kox.spring.day05.aop_annotation;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/*
* AOP配置类
* */

@Configuration // 标明Spring配置类
@ComponentScan("cn.kox.spring.day05.aop_annotation") // 组件扫描
@EnableAspectJAutoProxy // 开启Spring对AspectJ的支持
public class AopConfig {
}

2.6 创建骑士测试类

  • test/java/aop_annotation子包里创建测试类 - TestKnight
    在这里插入图片描述
package cn.kox.spring.day05.aop_annotation;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/*
* 测试骑士类
* */

public class TestKnight {

    private AnnotationConfigApplicationContext context; // 基于注解配置类的应用容器

    @Before
    public void init() {
        // 基于注解配置类创建应用容器
        context = new AnnotationConfigApplicationContext(AopConfig.class);
    }

    @Test
    public void testBraveKnight() {
        // 根据名称从应用容器里获取勇敢骑士对象
        BraveKnight knight = (BraveKnight) context.getBean("Mike");
        // 勇敢骑士执行任务
        knight.embarkOnQuest();
    }

    @After
    public void destroy() {
        // 关闭应用容器
        context.close();
    }
}

2.7 运行测试方法testBraveKnight(),查看效果

在这里插入图片描述

2.8 课堂练习

2.8.1 增加救美任务类与救美骑士类

  • 创建RescueDamselQuest类和RescueDamselKnight
  • RescueDamselQuest类
package cn.kox.spring.day05.aop_annotation;

import org.springframework.stereotype.Component;

/*
*救美任务类
* */
@Component
public class RescueDamselQuest {
    public void embark() {
        System.out.println("执行就美任务...");
    }
}

  • RescueDamselKnight类
package cn.kox.spring.day05.aop_annotation;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/*
* 救美骑士类
* */
@Component("Mike233")
public class RescueDamselKnight {
    @Autowired
    private RescueDamselQuest rescueDamselQuest;

    public void embarkOnQuest() {
        rescueDamselQuest.embark();
    }
}

2.8.2 在测试类里增救美骑士测试类

    @Test
    public void testDamselRescuingKnight() {
        RescueDamselKnight knight2 = (RescueDamselKnight) context.getBean("Mike233");
        knight2.embarkOnQuest();
    }

2.8.3 运行testDamselRescuingKnight()方法,查看结果

在这里插入图片描述

三、 实现注解式拦截

3.1 创建注解接口

在这里插入图片描述

3.2 修改勇敢骑士类

  • 给embarkOnQuest()添加自定义注解Action,并设置其name属性

3.3 修改游吟诗人切面

3.4 运行测试方法testBraveKnight(), 查看效果

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

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

3.7 练习

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/377471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习总结】Kalibr标定相机与IMU

本文仅用于记录自己学习过程。 使用方法 Kalibr包括:相机内参,多相机外参, (已知IMU和相机内参的)相机与IMU标定,以及扩展Kalibr支持IMU内参标定。 当已知IMU内参和相机内参后,使用按照指定方式录制的rosbag&#x…

西电数据库简答题核心考点汇总(期末真题+知识点)

文章目录前言一、关系代数1.1 真题一1.2 真题二二、SQL语句2.1 真题一2.2 真题二三、事务3.1 真题一四、关系理论4.1 真题一4.2 真题二五、数据库设计5.1 样例一5.2 考题二前言 主要针对西安电子科技大学《数据库系统》的概念核心考点进行汇总,包含核心考点。 【期…

第14天-ElasticSearch环境配置,构建检索服务及商品上架到ES库

1.ElasticSearch概念 官网介绍:https://www.elastic.co/cn/what-is/elasticsearch/ 官网学习文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 1.1.ElasticSearch与MySQL的比较 MySQL有事务性,而ElasticSearch没有…

GEBCO海洋数据下载

一、数据集简介 GEBCO(General Bathymetric chart of the Oceans)旨在为世界海洋提供最权威的、可公开获取的测深数据集。 目前的网格化测深数据集,即GEBCO_2022网格,是一个全球海洋和陆地的地形模型,在15角秒间隔的…

GAN | 代码简单实现生成对抗网络(GAN)(PyTorch)

2014年GAN发表,直到最近大火的AI生成全部有GAN的踪迹,快来简单实现它!!!GAN通过计算图和博弈论的创新组合,他们表明,如果有足够的建模能力,相互竞争的两个模型将能够通过普通的旧反向…

GMSL相机的相关配置(1)

文章目录一:GMSL相机的信息二:相关配置1.emmc系统下运行upgrade文件2.连接GMSL相机3.给ui可执行文件赋权限4.进入图为GMSL相机配置ui图形界面5.运行程序,打开摄像头一:GMSL相机的信息 我选择相机适配于基于Jetson AGX Orin的图为…

Docker在Windows环境的搭建和使用

文章目录安装WSL安装Docker安装Docker镜像下载Docker镜像启动gpu启动传送文件训练yolov5安装WSL Windows10和11支持Docker的安装,安装需要用到WSL。所以,我们先安装WSL。 参考文章:旧版 WSL 的手动安装步骤 以管理员身份打开powershell, 执行…

matplotlib综合学习

1.arange函数arange函数需要三个参数,分别为起始点、终止点、采样间隔。采样间隔默认值为1看例子: import numpy as np #import matplotlib.pyplot as plt xnp.arange(-5,5,1) print(x)2.绘制sin(x)曲线import numpy as np import matplotlib.pyplot as …

Python jieba分词如何添加自定义词和去除不需要长尾词

Python jieba分词如何添加自定义词和去除不需要长尾词 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 通过如下代码,读取一个txt的高频词汇: # 找到高频词汇t…

苹果触控笔有必要买吗?开学季性价比电容笔推荐

Apple Pencil的性能的确不错,但是由于它的售价实在是太高了,一般人还是舍不得花那么多钱买下来。目前市场上有很多平替的电容笔,不仅价格便宜,而且使用方便。那么,我们应该选择那个牌子的平替电笔呢?在购买…

“智能”创造未来:PDU智能化全面提升IDC数据中心用电能效!

一个月前,万众期盼的《流浪地球2》如期上映,无论是剧情还是特效,让广大观众享受到一次久违的来自中国科幻的震撼,时至今日仍是大家茶余饭后津津乐道的热点谈资。说起这部片子里,最让人紧张的部分,还得数为了…

解决MySQL的 Row size too large (> 8126).

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:无尽的折腾后,终于又回到…

电脑系统崩溃怎么修复教程

系统崩溃了怎么办? 如今的软件是越来越复杂、越来越庞大。由系统本身造成的崩溃即使是最简单的操作,比如关闭系统或者是对BIOS进行升级都可能会对PC合操作系统造成一定的影响。下面一起来看看电脑系统崩溃修复方法步骤。 工具/原料: 系统版本&#xf…

LeetCode-47. 全排列 II

目录题目思路回溯法拓展题目来源 47. 全排列 II 题目思路 这道题目和46.全排列的区别在与给定一个可包含重复数字的序列,要返回所有不重复的全排列。 强调的是去重一定要对元素进行排序,这样我们才方便通过相邻的节点来判断是否重复使用了。 我以示例中…

CC2530+ESP8266使用MQTT协议上传阿里云的问题

ATMQTTPUB<LinkID>,<"topic">,<"data">,<qos>,<retain>LinkID: 当前只支持 0 topic: 发布主题, 最长 64 字节 data: 发布消息, data 不能包含 \0, 请确保整条 ATMQTTPUB 不超过 AT 指令的最大长度限制 qos: 发布服务质量, 参…

项目管理软件排行榜!盘点前十名!

项目管理软件排行榜&#xff01;盘点前十名&#xff01; 如今企业规模不断扩大&#xff0c;业务逐渐复杂化&#xff0c;项目管理已经成为现代企业管理中不可或缺的一环。作为协调管理者、团队成员和客户之间交流的工具&#xff0c;项目管理软件不仅可以提高工作效率&#xff0…

数据结构入门--时间 空间复杂度

数据结构入门 时间 空间复杂度解析 目录 一. 算法效率 二. 时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3 题目练习 题目一 题目二 题目三 题目四 题目五 题目六 题目七 三. 空间复杂度 3.1 题目练习 题目一 题目二 题目三 一. 算法效率 算法效率…

Vim常用命令汇总

目录1 普通模式2 插入模式3 可视模式4 命令行模式4 文件操作5 动作命令1 普通模式 命令操作符合命令作用等同命令.重复上次修改x删除光标下的字符dd删除整行>G从当前行到文档末尾处的缩进层级a在当前光标之后添加内容i在当前光标之前添加内容A在当前行的结尾添加内容$aI在当…

Docker之安装redis

下面记录一下在docker中安装redis过程 1.查看redis镜像 docker search redis2.拉去镜像到Linux //指定拉取redis版本 docker pull redis:6.0 //不指定版本默认拉取最新 docker pull redis3.查看镜像是否拉取成功 docker images4.启动redis //2f66aad5324为redis的image id do…

驾驭云安全:2023年云安全展望

由于其的良好的可扩展性和优质的事件处理效率&#xff0c;云技术已成为现代企业的必备的管理技术之一&#xff0c;目前他已经成为所有行业及企业的热门选择。然而&#xff0c;攻击面积的增加以及不针对云技术衍生出来的多类攻击方式&#xff0c;使许多企业更容易受到威胁和数据…