Java企业开发学习笔记(2)利用组件注解符精简Spring配置文件

news2024/11/28 20:51:55

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

文章目录

  • 一、 利用组件注解符精简Spring配置文件
    • 1.1 创建新包
    • 1.2 复制四个类
    • 1.3 修改杀龙任务类
    • 1.4 修改救美任务类
    • 1.5 修改勇敢骑士类
    • 1.6 修改救美骑士类
    • 1.7 创建Spring配置文件
    • 1.8 创建测试类
  • 二、程序优化-面向接口
    • 2.1 创建任务接口
    • 2.2 创建骑士接口
    • 2.3 修改杀龙任务类
    • 2.4 修改救美任务类
    • 2.5 修改勇敢骑士类
    • 2.6 修改救美骑士类
    • 2.7 修改测试类
  • 三、课堂练习
    • 3.1 两种骑士交换执行任务
    • 3.2 两种骑士都执行两项任务
    • 3.3 两种骑士再交换执行任务


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

1.1 创建新包

  • 创建cn.kox.spring.day02
    在这里插入图片描述

1.2 复制四个类

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

1.3 修改杀龙任务类

  • 杀龙任务类 - SlayDragonQuest
  • 组件注解符 - @Component
    • 服务注解符 - @Service
    • 仓库注解符 - @Respository
    • 映射器注解符 - @Mapper
    • 控制器注解符 - @Controller
package cn.kox.spring.day02;

import org.springframework.stereotype.Component;

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

  • @Component相当于@Component(“slayDragonQuest”)

1.4 修改救美任务类

  • 救美任务类 - RescueDamselQuest
package cn.kox.spring.day02;

import org.springframework.stereotype.Component;

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

1.5 修改勇敢骑士类

  • 勇敢骑士类 - BraveKnight
package cn.kox.spring.day02;

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

@Component("RobinHood")
public class BraveKnight {
    @Value("罗宾汉") // 值注解符
    private String name;
    @Autowired // 自动装配注解符
    private SlayDragonQuest slayDragonQuest;

    /**
     * 勇敢骑士执行任务
     */
    public void embarkOnQuest() {
        System.out.print("勇敢骑士[" + name + "]"); // 骑士留名
        slayDragonQuest.embark(); // 执行杀龙任务
    }
}

1.6 修改救美骑士类

  • 救美骑士类 - DamselRescuingKnight,添加组件注解符,自动配置两个属性
package cn.kox.spring.day02;

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

@Component
public class RescueDamselKnight {
    @Value("格拉海德") // 值注解符
    private String name;
    @Autowired // 自动装配注解符
    private RescueDamselQuest rescueDamselQuest;

    public void embarkOnQuest() {
        System.out.print("救美骑士[" + name + "]");
        rescueDamselQuest.embark();
    }
}

1.7 创建Spring配置文件

  • resources目录创建xml_annotation子目录,然后在里面创建Spring配置文件 - spring-config.xml
<?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/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd">

    <!--组件扫描,扫描指定包下添加了注解符的类或接口,将其生成Bean对象-->
    <context:component-scan base-package="cn.kox.spring.day02" />
</beans>

1.8 创建测试类

  • 在test/java里创建cn.kox.spring.day02包,在包里创建TestKnight
package cn.kox.spring.day02;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestKnight {
    private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器

    @Before
    public void init() {
        // 基于Spring配置文件创建应用容器
        context = new ClassPathXmlApplicationContext("xml_annotation/spring-config.xml");
    }

    @Test
    public void testKnight() {
        // 根据名称从应用容器里获取勇敢骑士对象
        BraveKnight knight1 = (BraveKnight) context.getBean("RobinHood");
        // 勇敢骑士执行任务
        knight1.embarkOnQuest();
        // 根据名称从应用容器里获取救美骑士对象
        RescueDamselKnight knight2 = (RescueDamselKnight) context.getBean("rescueDamselKnight");
        // 救美骑士执行任务
        knight2.embarkOnQuest();
    }

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

  • 运行程序,查看结果
    在这里插入图片描述

二、程序优化-面向接口

2.1 创建任务接口

  • 任务接口 - Quest
    在这里插入图片描述
package cn.kox.spring.day02;

public interface Quest {
    void embark();
}

2.2 创建骑士接口

  • 骑士接口 - Knight
    在这里插入图片描述
package cn.kox.spring.day02;

public interface Knight {
    void embarkOnQuest();
}

2.3 修改杀龙任务类

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

2.4 修改救美任务类

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

2.5 修改勇敢骑士类

  • 勇敢骑士类 - BraveKnight,实现骑士接口
    在这里插入图片描述

2.6 修改救美骑士类

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

2.7 修改测试类

  • 测试类 - TestKnight
package cn.kox.spring.day02;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestKnight {
    private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器

    @Before
    public void init() {
        // 基于Spring配置文件创建应用容器
        context = new ClassPathXmlApplicationContext("xml_annotation/spring-config.xml");
    }

    @Test
    public void testKnight() {
        // 根据名称从应用容器里获取勇敢骑士对象
        Knight knight1 = (BraveKnight) context.getBean("RobinHood");
        // 勇敢骑士执行任务
        knight1.embarkOnQuest();
        // 根据名称从应用容器里获取救美骑士对象
        Knight knight2 = (RescueDamselKnight) context.getBean("rescueDamselKnight");
        // 救美骑士执行任务
        knight2.embarkOnQuest();
    }

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

  • 运行程序,执行结果
    在这里插入图片描述

三、课堂练习

3.1 两种骑士交换执行任务

  • 要求勇敢骑士去救美,要求救美骑士去杀龙
  • BraveKnight类
    在这里插入图片描述
  • RescueDamseKnight类
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述

3.2 两种骑士都执行两项任务

  • 要求勇敢骑士先执行杀龙任务,再执行救美任务。

  • 要求救美骑士先执行救美任务,再执行杀龙任务。

  • BraveKnight类
    在这里插入图片描述

  • RescueDamselKnight类
    在这里插入图片描述

  • 运行程序,查看结果
    在这里插入图片描述

3.3 两种骑士再交换执行任务

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

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

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

相关文章

【数据库】redis数据持久化

目录 数据持久化 一&#xff0c; RDB 1&#xff0c; 什么是RDB 2&#xff0c;持久化流程 3&#xff0c; 相关配置 案例演示&#xff1a; 4&#xff0c; 备份和恢复 1、备份 2、恢复 3&#xff0c;优势 4&#xff0c; 劣势 二&#xff0c;AOF 1&#xff0c;什么是A…

Java笔记026-集合/数组、Collection接口、ArrayList、Vector、LinkedList

集合集合的理解和好处保存多个数据使用的是数组&#xff0c;分析数组的弊端数组1、长度开始必须指定&#xff0c;而且一旦指定&#xff0c;不能更改2、保存的必须为同一类型的元素3、使用数组进行增加/删除元素的示意代码-比较麻烦Person数组扩容示意代码Person[] pers new Pe…

ChatGPT三个关键技术

情景学习&#xff08;In-context learning&#xff09; 对于一些LLM没有见过的新任务&#xff0c;只需要设计一些任务的语言描述&#xff0c;并给出几个任务实例&#xff0c;作为模型的输入&#xff0c;即可让模型从给定的情景中学习新任务并给出满意的回答结果。这种训练方式能…

论文笔记:How transferable are features in deep neural networks? 2014年NIP文章

文章目录一、背景介绍二、方法介绍三、实验论证四、结论五、感想参考文献一、背景介绍 1.问题介绍&#xff1a; 许多在自然图像上训练的深度神经网络都表现出一个奇怪的共同现象&#xff1a;在第一层&#xff0c;它们学习类似于Gabor过滤器和color blobs的特征。这样的第一层特…

c++提高篇——list容器

一、基本概念 功能:将数据进行链式存储 链表&#xff08;(list)是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的&#xff0c;链表由一系列结点组成。 结点的组成:一个是存储数据元素的数据域&#xff0c;另一个是存储下一个…

3DVR营销是什么?是否成为市场热门?

在当今市场经济环境中&#xff0c;营销对于在企业发展中的作用至关重要。市场是企业发展的战场&#xff0c;谁能在市场营销方面做得更好&#xff0c;就能够吸引公域平台流量、占据主流市场、开拓新局面从而稳定现有规模。这将确保企业不被市场淘汰&#xff0c;而是能够可持续性…

CSS(配合html的网页编程)

续上一篇博客,CSS是前端三大将中其中的一位,主要负责前端的皮,也就是负责html的装饰.一、基本语法规则也就是:选择器若干属性声明(选中一个元素然然后进行属性声明)CSS代码是放在style标签中,它可以放在head中也可以放在body中 ,可以放到代码的任意位置.color也就是设置想要输入…

如何描述元素与元素间的逻辑关系?

逻辑结构反映的是数据元素之间的关系&#xff0c;它们与数据元素在计算机中的存储位置无关&#xff0c;是数据结构在用户面前所呈现的形式。根据不同的逻辑结构来分&#xff0c;数据结构可分为集合、线性结构、树形结构和图形结构4种形式&#xff0c;接下来分别进行简要介绍。 …

宝塔搭建实战php源码云切程序转码m3u8生程序开源源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 今天给大家分享一套php云切片转码的源码&#xff0c;分享自己的视频但是由于视频文件太大&#xff0c;服务器带宽太小&#xff0c;导致分享困难&#xff0c;部署这套系统后&#xff0c;就可以在上传视频后切成ts格…

车机开发—【CarService启动流程】

汽车架构&#xff1a;车载HAL是汽车与车辆网络服务之间的接口定义&#xff08;同时保护传入的数据&#xff09;&#xff1a; 车载HAL与Android Automotive架构&#xff1a; Car App&#xff1a;包括OEM和第三方开发的AppCar API&#xff1a;内有包含CarSensorManager在内的AP…

5个有效的华为(HUAWEI)手机数据恢复方法

5个有效的手机数据恢复方法 华为智能手机中的数据丢失比许多人认为的更为普遍。发生这种类型的丢失有多种不同的原因&#xff0c;因此数据恢复软件的重要性。您永远不知道您的智能手机何时会在这方面垮台&#xff1b;因此&#xff0c;预防总比哀叹好&#xff0c;这就是为什么众…

通过 FTP 使用 Python 自动压缩网站图像

图像压缩对于技术SEO世界来说并不陌生,但是随着核心生命体征形式的网站性能是一个排名因素,现在是时候开始采取行动了。我已经做了几十次网站审计,我发现 80% 的网站性能问题都可以在图像或 JavaScript 下进行。当我看到图像是一个大问题时,我会欢呼,因为它是最容易解决的…

注意啦,面试通过后,别忘了教师资格证认定

所有要「教师资格证认定」教程的宝子们看过来面试合格的小伙伴都可以进行认定工作 . 认定时间 查询各省份认定公告&#xff0c;确定认定时间范围。以下是公告汇总网址&#xff08;https://www.jszg.edu.cn/portal/qualification_cert/dynamics?id21691&#xff09; 认定次数 每…

【jQuery】js实现文件浏览功能

1.说明 近期遇到一个浏览用户文件的需求&#xff0c;类似于访问百度网盘那样的列表&#xff0c;包含文件和文件夹&#xff0c;这个功能实现起来很简单&#xff0c;从服务器获取到的文件列表至少要有文件id、父级文件id、是否文件夹这三个字段 2.html设计 前端排版看你实际情…

x86架构设备的OpenWrt的空间扩容问题

openwrt固件是squashfs-combined-efi非exf4格式 直接将原有根分区扩容 用插件是&#xff1a;fdisk,losetup,resize2fs,blkid df -h fdisk -l fdisk /dev/sda //进入fdisk分区管理工具注意fdisk后参数是磁盘名称&#xff0c;是要根据实际情况填写 fdisk /dev/sda //进入fdi…

【04-JVM面试专题-什么是双亲委派机制(父类委托机制)?如何打破双亲委派机制?双亲委派机制的优缺点?什么是沙箱安全机制呢?】

什么是双亲委派机制&#xff1f;如何打破双亲委派机制&#xff1f; JVM的双亲委派机制知道吗&#xff1f;怎么打破它呢&#xff1f;你看看自己掌握的怎么样呢&#xff1f; 什么是双亲委派机制&#xff1f;(父类委托机制) 检查某个类是否已经加载 自底向上&#xff0c;从Custom…

将数组中的每个元素四舍五入到指定的精度numpy.rint()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将数组中的每个元素 四舍五入到指定的精度 numpy.rint() 选择题 请问np.rint(a)的输出结果是? import numpy as np anp.array([-1.72,-1.3,0.37,2.4]) print("【显示】a&#xff1a;\n…

requests库基本用法

目录 1 GET请求 1.1 无参数 1.2 查询字符串 2 POST 2.1 无参数 2.2 json数据 2.3 文件 3 一些常见的请求 3.1 base64 requests是请求用的&#xff0c;在发起请求中requests会默认帮我们解决一些问题&#xff0c;比如跨域 下面做几个例子&#xff0c;服务选用…

CTFer成长之路之SSRF漏洞

SSRF漏洞CTF SSRF Training 题目描述: web容器中存在一个flag&#xff0c;mysql中存在一个管理员账号密码&#xff0c;其余容器中均没有特定flag mysql容器中内置 tcpdump vulnweb容器中内置一个 fpm.py 攻击脚本 docker-compose.yml version: "3" services:w…

有色金属行业数字化之路探析

有色金属行业是我国国民经济的支柱产业和重要组成部分&#xff0c;是处于整个原材料生产链的上游环节&#xff0c;其支撑着冶炼、钢铁、智能制造业、芯片、建筑等行业的发展&#xff0c;也是是科学研究、国防建设等方面发展的重要材料基础&#xff0c;同时还是保障国家综合实力…