第五讲的课堂练习

2024-04-22 04:32
文章标签 课堂练习 第五

本文主要是介绍第五讲的课堂练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

课上老师带着我们完成了骑士类的相关操作。
一、增加救美任务类与救美骑士类
1、在lesson05.aop_xml子包里创建救美骑士类 - DamselRescuingKnight
在这里插入图片描述

package net.tjl.spring.lesson05.aop_xml;import net.tjl.spring.lesson4.RescueDamselQuest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** 功能:救美骑士类* 作者:谭金兰* 日期:2021年03月24日*/
@Component
public class DamselRescuingKnight {@Autowiredprivate RescueDamselQuest rescueDamselQuest;public void embarkOnQuest() {rescueDamselQuest.embark();}
}

2、在lesson05.aop_xml子包里创建救美骑士类 - RescueDamselQuest
在这里插入图片描述

package net.tjl.spring.lesson05.aop_xml;import org.springframework.stereotype.Component;/*** 功能:救美任务类* 作者:谭金兰* 日期:2021年03月24日*/
@Component
public class RescueDamselQuest {public void embark() {System.out.println("执行救美任务。");}
}

3、在测试类里增加测试方法 - testDamselRescuingKnight()
在这里插入图片描述
3、运行testDamselRescuingKnight()方法,查看结果
在这里插入图片描述
三、采用注解方式使用AOP
1、在net.tjl.spring包里创建lesson05.aop_annotation子包
在这里插入图片描述
2、在aop_annotation子包里创建杀龙任务类 - SlayDragonQuest
在这里插入图片描述

package net.tjl.spring.lesson05.aop_annotation;import org.springframework.stereotype.Component;/*** 功能:杀龙任务类* 作者:谭金兰* 日期:2021年03月24日*/
@Component
public class SlayDragonQuest {public void embark() {System.out.println("执行杀龙任务。");}
}

3、在aop_annotation子包里创建勇敢骑士类 - BraveKnight
在这里插入图片描述

package net.tjl.spring.lesson05.aop_annotation;import net.tjl.spring.lesson05.aop_xml.SlayDragonQuest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** 功能:勇敢骑士类* 作者:谭金兰* 日期:2021年03月24日*/
@Component("Mike")
public class BraveKnight {@Autowiredprivate SlayDragonQuest slayDragonQuest;public void embarkOnQuest() {slayDragonQuest.embark();}
}

4、在aop_annotation子包里创建注解接口 - Action
在这里插入图片描述

package net.tjl.spring.lesson05.aop_annotation;import java.lang.annotation.*;/*** 功能:动作注解接口* 作者:谭金兰* 日期:2021年03月24日*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Action {String name();
}

5、在aop_annotation子包里创建游吟诗人切面 - MinstrelAspect
在这里插入图片描述

package net.tjl.spring.lesson05.aop_annotation;
/*** 功能:游吟诗人类* 作者:谭金兰* 日期:2021年03月24日*/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
public class MinstrelAspect {@Pointcut("execution(* *.embarkOnQuest(..))")public void embark(){}@Before("embark()")public void singBeforeQuest(JoinPoint joinPoint) {System.out.println("啦啦啦,骑士出发了!");}@After("embark()")public void singAfterQuest(JoinPoint joinPoint) {System.out.println("真棒啊!骑士完成了任务!");}}

6、在aop_annotation子包里创建Spring配置类 - AopConfig
在这里插入图片描述

package net.tjl.spring.lesson05.aop_annotation;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;/*** 功能:AOP配置类* 作者:谭金兰* 日期:2021年03月24日*/@Configuration // 标明是Spring配置类
@ComponentScan("net.tjl.spring.lesson05.aop_annotation") // 组件扫描
@EnableAspectJAutoProxy // 开启Spring对ApectJ的支持
public class AopConfig {
}

7、在aop_annotation子包里创建测试类 - TestKnight
在这里插入图片描述

package net.tjl.spring.lesson05.aop_annotation;import net.tjl.spring.lesson05.aop_xml.BraveKnight;
import net.tjl.spring.lesson05.aop_xml.DamselRescuingKnight;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能:测试骑士类* 作者:谭金兰* 日期:2021年03月24日*/
public class TestKnight {private ClassPathXmlApplicationContext context;@Beforepublic void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("aop_xml/spring-config.xml");}@Testpublic void testBraveKnight() {// 根据名称从应用容器里获取勇敢骑士对象net.tjl.spring.lesson05.aop_xml.BraveKnight braveKnight = (BraveKnight) context.getBean("Mike");// 勇敢骑士执行任务braveKnight.embarkOnQuest();}@Afterpublic void destroy() {// 关闭应用容器context.close();}
}

8、运行测试方法testBraveKnight(),查看效果
在这里插入图片描述
9、增加救美任务类与救美骑士类
在这里插入图片描述

package net.tjl.spring.lesson05.aop_annotation;import org.springframework.stereotype.Component;/*** 功能:救美任务类* 作者:谭金兰* 日期:2021年03月24日*/
@Component
public class RescueDamselQuest {public void embark() {System.out.println("执行救美任务。");}
}
package net.tjl.spring.lesson05.aop_annotation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** 功能:救美骑士类* 作者:谭金兰* 日期:2021年03月24日*/
@Component
public class DamselRescuingKnight {@Autowiredprivate RescueDamselQuest rescueDamselQuest;public void embarkOnQuest() {rescueDamselQuest.embark();}
}

(2)在测试程序里增加对救美骑士的测试方法 - testDamselRescuingKnight()
在这里插入图片描述
(3) 运行测试方法testDamselRescuingKnight(),查看效果
在这里插入图片描述

10、实现注解式拦截
(1)修改勇敢骑士类,给embarkOnQuest()添加自定义注解Action
在这里插入图片描述
(2)修改游吟诗人切面类 - MinstrelAspect
在这里插入图片描述
(3)运行测试方法testBraveKnight(),查看效果

在这里插入图片描述
(3)运行测试方法testDamselRescuingKnight()(),查看效果
在这里插入图片描述

这篇关于第五讲的课堂练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/924818

相关文章

代码随想录算法训练营第五十天 | 98. 所有可达路径

目录 98. 所有可达路径 思路 图的存储 邻接矩阵          邻接表 深度优先搜索 1.确认递归函数,参数 2.确认终止条件 3.处理目前搜索节点出发的路径 方法一: 邻接矩阵写法 方法二:邻接表写法 98. 所有可达路径 题目链接:卡码网题目链接(ACM模式) 文章讲解:代码随想录  【题目描述】 给定一个有 n 个节点的有向无环图,节点编

图论篇--代码随想录算法训练营第五十天打卡| 深度优先搜索理论基础,98. 所有可达路径,广度优先搜索理论基础

深度优先搜索理论基础 DFS模板: void dfs(参数) {if (终止条件) {存放结果;return;}for (选择:本节点所连接的其他节点) {处理节点;dfs(图,选择的节点); // 递归回溯,撤销处理结果}} 98. 所有可达路径 题目链接:98. 所有可达路径 题目描述: 给定一个有 n 个节点的有向无环图,节点编号从 1 到 n。请编写一个函数,找出并返回所

线性代数 第五讲:线性方程组_齐次线性方程组_非齐次线性方程组_公共解同解方程组_详解

线性方程组 文章目录 线性方程组1.齐次线性方程组的求解1.1 核心要义1.2 基础解系与线性无关的解向量的个数1.3 计算使用举例 2. 非齐次线性方程的求解2.1 非齐次线性方程解的判定2.2 非齐次线性方程解的结构2.3 计算使用举例 3.公共解与同解3.1 两个方程组的公共解3.2 同解方程组 4.重难点题型总结4.1 抽象齐次线性方程组的求解4.1 含有系数的非齐次线性方程组的求

【Python 第五篇章】数据类型

一、列表详解 list.append(x) 在列表末尾添加一个元素。list.extend(iterable) 用可迭代对象的元素扩展列表。list.insert(i,x) 在指定位置插入元素,第一个参数是插入元素的索引,第二个是值。list.remove(x) 从列表中删除第一个值为 x 的元素。list.pop([i]) 移除列表中给定位置的条目,并返回该条目。如果未指定索引号,则 a.po

小白Sass教程---通过实例学Sass--第五讲--scss文件导入及Sass样式优先级测试

一、sass提供导入机制,可以将页面的共用较为通用的scss提取出来,这样方便维护,其他页面按需导入相关的scss文件,避免了所有的样式都在一个样式文件中,一个样式文件较为繁重难以维护。   @import "../sass/lesson4"; 这样就导入了lesson4这个scss文件,可以使用其中的样式。   二、测试一下样式应用的优先级 1、本文件下:嵌套结构、非嵌套结构 在本

GUI编程04:课堂练习及总结

本节内容视频链接:6、课堂练习讲解及总结_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p=6&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5 根据前三节学习到的Frame、Panel、Button知识,画出一下窗口界面: 实现代码如下: public class ExDemo01

《ZigBee开发笔记》第五部分 外设篇 - 协议栈实验 第5章 CC2530继电器模块

1实验目的 通过实验掌握 CC2530 芯片 GPIO 的配置方法;掌握继电器模块的使用。 2实验设备 硬件:PC 机一台;ZB2530(底板、核心板、仿真器、USB 线)一套;继电器模块一个 软件:win7 系统,IAR 8.20 集成开发环境 3实验相关电路图 图1 路继电器模块,低电平触发,买图片中的继电器可以直接插入板子。 (本实验是接在J9 ): 1)、VCC:接电

《ZigBee开发笔记》第五部分 外设篇 - 基础实验 第5章 CC2530继电器模块

1理论分析 1.1概述 继电器(relay)是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电 路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。 图1继电器 1

《ZigBee开发笔记》第五部分 外设篇 - 基础实验 第3章 A - CC2530 MQ-2气体传感器

1理论分析 MQ- 2 气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。MQ-2 气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。这种传感器可检测多种可燃性气体,是一款适合多种应用的低成本传

《ZigBee开发笔记》第五部分 外设篇 - 协议栈实验 第2章 CC2530温湿度传感器DHT11

1实验目的 掌握 ZStack 的工作原理;知道如何添加 DHT11 驱动到协议栈上;知道如何在协议栈上读取、发送、接收温湿度。 2实验设备 硬件:PC 机一台;ZB2530(底板、核心板、仿真器、USB 线)两套;DHT11 一个 软件:win7 系统,IAR 8.20 集成开发环境、串口助手 3实验相关电路图 图1 4实验分析 由于此实验和 DS18B20 共用一个 I