企业级信息系统开发学习笔记1.2 初探Spring——利用组件注解符精简Spring配置文件

news/2024/4/26 3:17:14/文章来源:https://blog.csdn.net/howard2005/article/details/129123984

文章目录

  • 零、本讲学习目标
  • 一、课程引入
  • 二、打开项目 - SpringDemo
  • 三、利用组件注解符精简Spring配置文件
    • (一)创建新包
    • (二)复制四个类
    • (三)修改杀龙任务类
    • (四)修改救美任务类
    • (五)修改勇敢骑士类
    • (六)修改救美骑士类
    • (七)创建Spring配置文件
    • (八)创建测试类
  • 四、程序优化 - 面向接口
    • (一)创建任务接口
    • (二)创建骑士接口
    • (三)修改杀龙任务类
    • (四)修改救美任务类
    • (五)修改勇敢骑士类
    • (六)修改救美骑士类
    • (七)修改测试类
    • (八)运行测试类
  • 五、课堂练习
    • 任务1、两种骑士交换执行任务。
    • 任务2、两种骑士都执行两项任务。
    • 任务3、两种骑士再交换执行任务。

零、本讲学习目标

  1. 掌握采用组件注解符精简Spring配置文件
  2. 理解面向接口优化程序结构的思想

一、课程引入

  • 上一讲,我们采用XML配置文件的方式使用Spring容器管理Bean对象,最后给出一个思考题:“如果我们有几十个类要创建Bean,采用XML配置方式,会不会让Spring配置文件显得很臃肿,怎么解决这个问题呢?”,这一讲,我们准备利用组件注解符精简Spring配置文件。

  • 配置 - configuration

  • 注解 - annotation

二、打开项目 - SpringDemo

  • Maven项目 - SpringDemo
    在这里插入图片描述

三、利用组件注解符精简Spring配置文件

(一)创建新包

  • 创建net.huawei.spring.day02
    在这里插入图片描述

(二)复制四个类

  • day01子包的四个类拷贝到day02子包
    在这里插入图片描述

(三)修改杀龙任务类

  • 杀龙任务类 - 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("执行杀龙任务……");}
}
  • @Component相当于@Component("slayDragonQuest")

(四)修改救美任务类

  • 救美任务类 - 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(); // 执行杀龙任务}
}
  • 添加组件注解符,设置参数“RobinHood”,对应的就是Spring配置文件里装配Bean元素的id属性值。
  • 注意:删除setSlayDragonQuest()方法,因为已经通过注解符设置了勇敢骑士的姓名和杀龙任务属性。
  • 查看@Component注解源码
    在这里插入图片描述

(六)修改救美骑士类

  • 救美骑士类 - 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();}
}
  • 运行测试方法testKnight(),查看结果
    在这里插入图片描述

四、程序优化 - 面向接口

  • Spring框架可以方便地管理Bean及其相互依赖。为了模块之间实现松耦合,一般采用面向接口的方式。多种骑士,多种任务,可以任意搭配。为了实现这个效果,我们应该抽象出两个接口:骑士接口(Knight)和任务接口(Quest)。骑士接口有两个实现类:BraveKnightDamselRescuingKnight;任务接口有两个实现类:SlayDragonQuestRescueDamselQuest

(一)创建任务接口

  • 任务接口 - Quest
    在这里插入图片描述
package net.huawei.spring.day02;/*** 功能:任务接口* 作者:华卫* 日期:2023年02月20日*/
public interface Quest {void embark();
}

(二)创建骑士接口

  • 骑士接口 - Knight
    在这里插入图片描述
package net.huawei.spring.day02;/*** 功能:骑士接口* 作者:华卫* 日期:2023年02月20日*/
public interface Knight {void embarkOnQuest();
}

(三)修改杀龙任务类

  • 杀龙任务类 - SlayDragonQuest ,实现任务接口
    在这里插入图片描述

(四)修改救美任务类

  • 救美任务类 - RescueDamselQuest,实现任务接口
    在这里插入图片描述

(五)修改勇敢骑士类

  • 勇敢骑士类 - BraveKnight,实现骑士接口
    在这里插入图片描述
  • 注意:SlayDragonQuest类改成了Quest接口,这样就可以给该骑士自动装配任何任务(实现了Quest接口的Bean),增加了程序的灵活性。

(六)修改救美骑士类

  • 救美骑士类 - DamselRescuingKnight,实现骑士接口
    在这里插入图片描述

(七)修改测试类

  • 测试类 - TestKnight
    在这里插入图片描述

(八)运行测试类

  • 运行测试方法 - testKnight
    在这里插入图片描述

五、课堂练习

任务1、两种骑士交换执行任务。

  • 要求勇敢骑士去救美,要求救美骑士去杀龙。
    在这里插入图片描述

任务2、两种骑士都执行两项任务。

  • 要求勇敢骑士先执行杀龙任务,再执行救美任务。
  • 要求救美骑士先执行救美任务,再执行杀龙任务。
    在这里插入图片描述

任务3、两种骑士再交换执行任务。

  • 要求勇敢骑士完成杀龙任务,救美骑士完成救美任务。
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html常用font-family设置字体样式

<table border"1" cellpadding"0" cellspacing"0" ><tr><td><h3 style"font-family: 黑体;">黑体&#xff1a;SimHei</h3></td><td><h3 style"font-family: 华文黑体;">华…

Prometheus集群分布式架构浅析

集群行为是一种常见于自然界中鱼群、鸟群、蜂群等低等群居生物的集体行为&#xff0c;受此启发形成了无人机集群的概念。无人机集群不是多无人机间的简单编队&#xff0c;而是通过必要的控制策略使之产生集群协同效应&#xff0c;从而具备执行复杂多变、危险任务的能力。目前无…

如何快速、全面、深入地掌握一门编程语言

思考路线 如何快速&#xff1f; 什么样的Demo才能让人觉得你掌握了它&#xff1f; 空 判断&#xff1a;构造一个可以判断所有空的 is_empty 函数 for 循环&#xff1a;i 和 集合迭代两种 时间获取&#xff1a;年/月/日 时分秒 时间戳与时间格式互转 休眠时间函数 字符串处理…

Word控件Spire.Doc 【Table】教程(17):如何在 C#、VB.NET 中删除 Word 表格中的行和列

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

PCB设计中降低噪声与电磁干扰的24个窍门

电子设备的灵敏度越来越高&#xff0c;这要求设备的抗干扰能力也越来越强&#xff0c;因此PCB设计也变得更加困难&#xff0c;如何提高PCB的抗干扰能力成为众多工程师们关注的重点问题之一。本文将介绍PCB设计中降低噪声与电磁干扰的一些小窍门。 下面是经过多年设计总结出来的…

大数据处理学习笔记1.3 使用Scala集成开发环境

文章目录零、本讲学习目标一、搭建Scala的IntelliJ IDEA开发环境&#xff08;一&#xff09;启动IDEA&#xff08;二&#xff09;安装Scala插件&#xff08;三&#xff09;配置IDEA使用的默认JDK&#xff08;四&#xff09;创建Scala项目1、创建Scala项目 - ScalaDemo2、创建Sc…

linux高级命令之死锁

死锁学习目标能够知道产生死锁的原因1. 死锁的概念死锁: 一直等待对方释放锁的情景就是死锁为了更好的理解死锁&#xff0c;来看一个现实生活的效果图:说明:现实社会中&#xff0c;男女双方一直等待对方先道歉的这种行为就好比是死锁。死锁的结果会造成应用程序的停止响应&…

【vue】elemente-ui table toggleRowSelection 默认选择无效[已解决]

项目场景&#xff1a; 点击按钮&#xff0c;弹出一个弹出框&#xff0c;内部出现一个table表&#xff0c;表内数据是动态获取&#xff0c;同时得勾选上几个table表的数据&#xff0c;类似以下的图 问题描述 点击按钮显示弹出框&#xff0c;加载table中的数据&#xff0c;默…

【机器学习】Adaboost

1.什么是Adaboost AdaBoost&#xff08;adapt boost&#xff09;&#xff0c;自适应推进算法&#xff0c;属于Boosting方法的学习机制。是一种通过改变训练样本权重来学习多个弱分类器并进行线性结合的过程。它的自适应在于&#xff1a;被前一个基本分类器误分类的样本的权值会…

springboot整合Chat Generative Pre-trained Transformer

什么是Chat Generative Pre-trained Transformer Chat Generative Pre-trained Transformer&#xff0c;是以人工智能驱动的聊天机器人程序 &#xff0c;已经更新多个版本&#xff0c;很多大厂也都在接入其API。 整合难度 难度一颗星&#xff0c;基本上就是给官方API发请求&am…

在VMware Workstation中配置固定IP、在VMware Fusion中配置固定IP

1、在VMware Workstation中配置固定IP 配置固定IP需要2个大步骤&#xff1a; 1.在VMware Workstation&#xff08;或Fusion&#xff09;中配置IP地址网关和网段&#xff08;IP地址的范围&#xff09; 首先让我们&#xff0c;先进行第一步&#xff0c;跟随图片进行操作 现在进…

基于某业务单登陆场景并发测试实战

文章目录1 测试目的2 测试目标和测试对象3 名词解释4 测试说明5 测试环境和工具5.1 测试工具5.2 测试环境5.3 人力计划6 测试用例6.1 方案设计6.2 接口地址6.3 接口参数6.3.1 header参数6.3.2 请求参数7 脚本设计8 监控数据8.1 虚拟用户并发情况8.2 事务响应时间8.3 每秒点击次…

面试攻略,Java 基础面试 100 问(十二)

如何将字符串转换为基本数据类型&#xff1f; 调用基本数据类型对应的包装类中的方法 parseXXX(String)或 valueOf(String)即可返回相应基本类型&#xff1b; 如何将基本数据类型转换为字符串&#xff1f; 一种方法是将基本数据类型与空字符串&#xff08;””&#xff09;连…

微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI RestClient

分布式搜索引擎01-- elasticsearch基础0.学习目标1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容例如&#xff1a;在GitHub搜索代码…

半年前学习了性能测试涨薪5k, 经验+技术积累+坚持很重要

做测试一年多来&#xff0c;虽然平时的工作都能很好的完成&#xff0c;但最近突然发现自己在关于测试的整体知识体系上面的了解很是欠缺&#xff0c;所以&#xff0c;在工作之余也做了一些测试方面的知识的补充。不足之处&#xff0c;还请大家多多交流&#xff0c;互相学习。现…

系列三、docker相关指令

一、docker指令 1.1、查看docker详细信息 docker info 1.2、查看docker版本 docker version 1.3、帮助命令 docker --help 二、images指令 2.1、查看本地仓库中有哪些镜像 docker images 2.2、下载新的镜像 # 语法 docker pull 镜像名:版本号# 案例 docker pull mysql…

Node.js安装配置及Angular CLI的安装

NodeJS的安装node.js官网下载地址: https://nodejs.org/en/download/在node.js的官网上面下载适合自己机型的&#xff0c;如果是Windows系统的话&#xff0c;建议下载对应的 Windows Installer (.msi) 。下载完成后&#xff0c;双击打开安装&#xff0c;安装路径最好自定义&…

12款适合小团队协作、任务管理和进度跟踪的在线任务管理的工具推荐?

国内外12款主流任务管理软件测评: 1.开发任务管理PingCode; 2.多合一项目任务管理Worktile;3.个人和小团队项目任务管理Notion; 4.企业任务管理平台SmartTask; 5.小团队任务管理Teambition;6.IT任务追踪管理Jira等。无论是做好工作任务管理还是个人任务管理&#xff0c;从来都不…

Flink-多流转换(Union、Connect、Join)

文章目录多流转换分流基本合流操作联合&#xff08;Union&#xff09;连接&#xff08;Connect&#xff09;基于时间的合流——双流联结&#xff08;Join&#xff09;窗口联结&#xff08;Window Join&#xff09;间隔联结&#xff08;Interval Join&#xff09;窗口同组联结&a…

Git复习

1. 引言 现在要用到Git&#xff0c;复习一下关于Git的指令&#xff0c;知识摘自《Pro Git》 2. 起步 git和其他版本控制软件最大的差别在于git是直接记录某个版本的快照&#xff0c;而不是逐渐地比较差异。 安装: sudo apt install git-all设置用户信息&#xff1a; git c…