java企业级信息系统开发学习笔记02初探spring——利用组件注解符精简spring配置文件
文章目录
- 一、学习目标
- 二、打开01的项目
- 三、利用组件注解符精简spring配置文件
- (一)创建新包,复制四个类
- (二)修改杀龙任务类
- (三)修改救美任务类
- (四)修改勇敢骑士类
- (五)修改救美骑士类
- (六)创建spring配置文件
- (七)创建测试类
- 四、程序优化-面向接口
- (一)创建任务接口
- (二)创建骑士接口
- (三)修改杀龙任务类
- (四)修改救美任务类
- (五)修改勇敢骑士类
- (六)修改救美骑士类
- (七)修改测试类
- (八)运行测试类
一、学习目标
1.掌握采用组件注解符精简Spring配置文件
2.理解面向接口优化程序结构的思想
二、打开01的项目
三、利用组件注解符精简spring配置文件
(一)创建新包,复制四个类
(二)修改杀龙任务类
- 杀龙任务类 - SlayDragonQuest
- 给Java类添加组件注解符@Component,意味着要交给Spring容器管理,如果没有设置参数,那么组件采用默认名称,就是类名首字母小写 - slayDragonQuest
package net.huawei.spring.day02;import org.springframework.stereotype.Component;/*** 功能:杀龙任务类* 作者:华卫* 日期:2023年02月13日*/
@Component
public class SlayDragonQuest {public void embark() {System.out.println("执行杀龙任务……");}
}
(三)修改救美任务类
- 救美任务类 - RescueDamselQuest
package net.huawei.spring.day02;import org.springframework.stereotype.Component;/*** 功能:救美任务类* 作者:华卫* 日期:2023年02月20日*/
@Component
public class RescueDamselQuest {public void embark() {System.out.println("执行救美任务……");}
}
(四)修改勇敢骑士类
- 勇敢骑士类 - BraveKnight
package net.huawei.spring.day02;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/*** 功能:勇敢骑士类* 作者:华卫* 日期:2023年02月20日*/
@Component("RobinHood")
public class BraveKnight {@Value("罗宾汉") // 值注解符private String name;@Autowired // 自动装配注解符private SlayDragonQuest slayDragonQuest;/*** 勇敢骑士执行任务*/public void embarkOnQuest() {System.out.print("勇敢骑士[" + name + "]"); // 骑士留名slayDragonQuest.embark(); // 执行杀龙任务}
}
(五)修改救美骑士类
- 救美骑士类 - DamselRescuingKnight,添加组件注解符,自动配置两个属性
package net.huawei.spring.day02;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/*** 功能:救美骑士类* 作者:华卫* 日期:2023年02月20日*/
@Component
public class RescueDamselKnight {@Value("格拉海德") // 值注解符private String name;@Autowired // 自动装配注解符private RescueDamselQuest rescueDamselQuest;public void embarkOnQuest() {System.out.print("救美骑士[" + name + "]");rescueDamselQuest.embark();}
}
(六)创建spring配置文件
- 在resources目录创建xml_annotation子目录,然后在里面创建Spring配置文件 - spring-config.xml
- 组件扫描:扫描指定包下添加了注解符的类(@Component、@Service、@Repository、@Mapper、@Controller),将其生成Bean对象
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--组件扫描,扫描指定包下添加了注解符的类或接口,将其生成Bean对象--><context:component-scan base-package="net.huawei.spring.day02" />
</beans>
(七)创建测试类
- 在test/java里创建net.huawei.spring.day02包,在包里创建TestKnight类
package net.huawei.spring.day02;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能:测试骑士类* 作者:华卫* 日期:2023年02月20日*/
public class TestKnight {private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器@Beforepublic void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("xml_annotation/spring-config.xml");}@Testpublic void testKnight() {// 根据名称从应用容器里获取勇敢骑士对象BraveKnight knight1 = (BraveKnight) context.getBean("RobinHood");// 勇敢骑士执行任务knight1.embarkOnQuest();// 根据名称从应用容器里获取救美骑士对象RescueDamselKnight knight2 = (RescueDamselKnight) context.getBean("rescueDamselKnight");// 救美骑士执行任务knight2.embarkOnQuest();}@Afterpublic void destroy() {// 关闭应用容器context.close();}
}
四、程序优化-面向接口
- Spring框架可以方便地管理Bean及其相互依赖。为了模块之间实现松耦合,一般采用面向接口的方式。多种骑士,多种任务,可以任意搭配。为了实现这个效果,我们应该抽象出两个接口:骑士接口(Knight)和任务接口(Quest)。骑士接口有两个实现类:BraveKnight和DamselRescuingKnight;任务接口有两个实现类:SlayDragonQuest和RescueDamselQuest。
(一)创建任务接口
package net.huawei.spring.day02;/*** 功能:任务接口* 作者:华卫* 日期:2023年02月20日*/
public interface Quest {void embark();
}
(二)创建骑士接口
package net.huawei.spring.day02;/*** 功能:骑士接口* 作者:华卫* 日期:2023年02月20日*/
public interface Knight {void embarkOnQuest();
}
(三)修改杀龙任务类
(四)修改救美任务类
(五)修改勇敢骑士类
(六)修改救美骑士类
(七)修改测试类
(八)运行测试类
相关文章:

java企业级信息系统开发学习笔记02初探spring——利用组件注解符精简spring配置文件
文章目录一、学习目标二、打开01的项目三、利用组件注解符精简spring配置文件(一)创建新包,复制四个类(二)修改杀龙任务类(三)修改救美任务类(四)修改勇敢骑士类…...

用Python发送电子邮件?这也太丝滑了吧(21)
小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 欢迎和猫妹一起,趣味学Python。 今日主题 猫爸赚钱养家,细想起来真的不容易啊! 起早贪黑,都是6点早起做早饭,送…...

分类预测 | MATLAB实现CNN-GRU-Attention多输入分类预测
分类预测 | MATLAB实现CNN-GRU-Attention多输入分类预测 目录分类预测 | MATLAB实现CNN-GRU-Attention多输入分类预测分类效果模型描述程序设计参考资料分类效果 模型描述 Matlab实现CNN-GRU-Attention多变量分类预测 1.data为数据集,格式为excel,12个输…...

C++提高编程(1)
C提高编程1.模板1.1模板的概念1.2函数模板1.2.1函数模板语法1.2.2函数模板注意事项1.2.3函数模板案例1.2.4普通函数与函数模板的区别1.2.5普通函数与函数模板的调用规则1.2.6模板的局限性1.3类模板1.3.1类模板语法1.3.2类模板和函数模板区别1.3.3类模板中成员函数创建时机1.3.4…...
day26 回溯算法的部分总结
回溯算法的部分总结 回溯算法是一种常用于解决排列组合问题、搜索问题的算法,它的基本思想是将问题的解空间转化为一棵树,通过深度优先搜索的方式遍历树上的所有节点,找到符合条件的解。回溯算法通常使用递归实现,每次递归时传入…...

带你玩转Python爬虫(胆小者勿进)千万别做坏事·······
这节课很危险,哈哈哈哈,逗你们玩的 目录 写在前面 1 了解robots.txt 1.1 基础理解 1.2 使用robots.txt 2 Cookie 2.1 两种cookie处理方式 3 常用爬虫方法 3.1 bs4 3.1.1 基础介绍 3.1.2 bs4使用 3.1.2 使用例子 3.2 xpath 3.2.1 xpath基础介…...

【JavaScript 】严格模式,With关键字,测试框架介绍,assert
❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录静态类型语言弱类型严格模式将过失错误转化为异常简化变量的使用With测试框架try-catch选择性捕获…...
mybatis实现一个简单的CRUD功能的小案例(后端)编写流程
下面是一个使用mybatis实现增删改查功能的示例程序: 1.创建一个数据库 首先需要创建一个名为test_db的数据库,里面包含一个名为user_info的表,其中包含id、name、age三个字段。 2.配置mybatis 在项目的pom.xml文件中添加mybatis和mysql依…...

腾讯云轻量应用服务器价格表(2023版)
2023腾讯云轻量应用服务器2核2G4M带宽88元一年、2核4G6M带宽159元/年、4核8G10M优惠价425元、8核16G14M价格1249、16核32G20M服务器2499元一年,今天分享2023腾讯云服务器配置及精准报价。 腾讯云轻量应用服务器优惠价格表 腾讯云服务器分为轻量应用服务器和云服务器…...

网络层IP协议和数据链路层
目录IP协议协议头格式分片网段划分特殊的IP地址IP地址的数量限制NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器私有IP地址和公网IP地址路由路由表生成算法数据链路层认识以太网以太网帧格式认识MAC地址对比理解MAC地址和IP地址认识MTUMTU对IP协议的影响MT…...
零基础学习Java 03
目录 数组 动态初始化数组 静态初始化 数组的应用 数组两种典型的异常 length关键字求出数组的长度 数组遍历在IDEA中输出快捷语句 对象数组 数组的遍历:foreach方法 二维数组 枚举(enum) 数组 1在方法中可以返回一个数组,但是在定义方法时类型要…...
PG数据库超时退出 TCP设定
数据库在使用psql工具以及jdbc进行远程连接时,在经过一定时间之后报错-致命错误: terminating connection due to client no input timeout。 排查安全参数,hg_clientnoinput 0; 问题原因 操作系统TCP相关参数设置不正确&…...

每日学术速递4.4
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CL 1.Baize: An Open-Source Chat Model with Parameter-Efficient Tuning on Self-Chat Data 标题:Baize:一种对自聊天数据进行参数高效调优的开源聊天模型 作者…...

ChatGPT将引发大量而普遍的网络安全隐患
ChatGPT是一个基于人工智能的语言生成模型,它可以在任何给定的时间,使用自然语言生成技术,生成文本、对话和文章。它不仅可以被用来编写文本,还可以用来编写语言、生成图像和视频。目前, ChatGPT已广泛应用于语言翻译、…...

购买学生护眼台灯几瓦最好?有哪些推荐护眼灯
现今的近视已然成为普遍现象,而且有往低年龄段发展的趋势。究其原因,长期使用电子设备是一方面,还是就是我们日常工作、学习、生活没有很好的护眼环境,很多时候我们不经意的错误习惯,久而久之就有可能诱发近视。对孩子…...

什么是 SYN 攻击?如何避免 SYN 攻击?
SYN 攻击方式最直接的表现就会把 TCP 半连接队列打满,这样当 TCP 半连接队列满了,后续再在收到 SYN 报文就会丢弃,导致客户端无法和服务端建立连接。 避免 SYN 攻击方式,可以有以下四种方法: 调大 netdev_max_backlo…...
数据分析练习——学习一般分析步骤
目录 一、准备工作 二、导入库和数据 1、导入必要的库: 2、模拟数据 三、数据分析过程 1、读取数据: 2、数据概览和描述性统计: 2.1、查看数据概览: 2.2、查看描述性统计: 3、数据清洗: 3.1、处…...
Linux环境下挂载exfat格式U盘,以及安装exfat文件系统
目录Linux一般支持的文件系统有:1.安装exfat软件安装工具环境以及exfat件依赖的系统软件下载exfat源码包并安装2.挂载exfat格式U盘查看U盘在那个目录执行挂载命令Linux一般支持的文件系统有: 文件系统名称详情ext专门为Linux核心做的第一个文件系统&…...

网格布局grid
grid网格定义 css网格是一个用于web的二维(行和列的组合)布局,利用网格,你可以把内容按照行和列的格式进行排版,另外,可以轻松的实现复杂布局。 1.定义网格和fr单位 1.1定义网格 在父元素加上ÿ…...

《扬帆优配》环境更优!这类资金,迎利好!
近来,第一批主板注册制新股连续发动申购,网下询价中,组织出资者频繁现身打新商场,公募基金、社保基金、养老金、保险资金等中长时间资金,成为全面注册制下新股发行商场的重要参加者。 多位业内人士对此表明,…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...