企业级信息系统开发学习笔记1.4 初探Spring——采用Java配置类管理Bean

news2024/12/25 9:14:58

文章目录

  • 零、本讲学习目标
  • 一、课程引入
  • 二、采用Java配置类管理Bean
    • (一)打开项目
    • (二)创建子包
    • (三)创建杀龙任务类
    • (四)创建勇敢骑士类
    • (五)创建Spring配置类
    • (六)创建测试类
    • (七)运行测试类
  • 三、课堂练习
  • 四、Spring管理Bean的四种方式

零、本讲学习目标

  1. 掌握利用Java配置类管理Bean

一、课程引入

上一讲,采用注解配置类取代了Spring配置文件,这一讲,我们来学习如何采用Java配置类管理Bean。

二、采用Java配置类管理Bean

(一)打开项目

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

(二)创建子包

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

(三)创建杀龙任务类

  • day04子包里创建杀龙任务类 - SlayDragonQuest
    在这里插入图片描述
package net.huawei.spring.day04;

/**
 * 功能:杀龙任务类
 * 作者:华卫
 * 日期:2023年02月20日
 */
public class SlayDragonQuest {
    public void embark() {
        System.out.println("执行杀龙任务……");
    }
}
  • 注意:没有添加@Component注解符声明Bean

(四)创建勇敢骑士类

  • day04子包里创建勇敢骑士类 - BraveKnight
    在这里插入图片描述
package net.huawei.spring.day04;

/**
 * 功能:勇敢骑士类
 * 作者:华卫
 * 日期:2023年02月20日
 */
public class BraveKnight {
    private String name; // 骑士姓名
    private SlayDragonQuest slayDragonQuest; // 杀龙任务  

    public void setName(String name) {
        this.name = name;
    }

    /**
     * 设置杀龙任务
     *
     * @param slayDragonQuest
     */
    public void setSlayDragonQuest(SlayDragonQuest slayDragonQuest) {
        this.slayDragonQuest = slayDragonQuest;
    }

    /**
     * 勇敢骑士执行任务
     */
    public void embarkOnQuest() {
        System.out.print("勇敢骑士[" + name + "]"); // 骑士留名
        slayDragonQuest.embark(); // 执行杀龙任务
    }
}
  • 注意:没有添加@Component注解符声明Bean;没有使用@Autowired注解符注入Bean

(五)创建Spring配置类

  • day04子包里创建Spring配置类 - SpringConfig
    在这里插入图片描述
package net.huawei.spring.day04;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 功能:Spring配置类
 * 作者:华卫
 * 日期:2023年02月20日
 */
@Configuration // 表明是Spring配置类
public class SpringConfig {
    @Bean // 创建名为slayDragonQuest的Bean
    public SlayDragonQuest slayDragonQuest() {
        return new SlayDragonQuest();
    }

    @Bean // 创建名为braveKnight的Bean
    public BraveKnight braveKnight() {
        BraveKnight braveKnight = new BraveKnight();
        braveKnight.setName("罗宾汉");
        braveKnight.setSlayDragonQuest(slayDragonQuest());
        return braveKnight;
    }
}
  • 使用@Configuration注解表明当前类是一个配置类,这意味着这个类里可能有0个或多个@Bean注解,此处没有使用包扫描,因为所有的Bean都在此类中定义了。
  • 使用@Bean注解,不带参数,声明当前方法的返回值是一个Bean,而Bean的名称就是方法名,当然也可以设置@Bean的参数,用来指定Bean的名称。
    在这里插入图片描述

(六)创建测试类

  • 在/test/java里创建net.huawei.spring.day04包,在包里创建TestKnight
    在这里插入图片描述
package net.huawei.spring.day04;

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

/**
 * 功能:测试骑士类
 * 作者:华卫
 * 日期:2023年02月20日
 */
public class TestKnight {
    private AnnotationConfigApplicationContext context; // 基于注解配置类的应用容器

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

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

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

在这里插入图片描述

(七)运行测试类

  • 运行testKnight测试方法,查看结果
    在这里插入图片描述

三、课堂练习

  1. 创建救美任务类和救美骑士类
  2. 修改Spring配置类 - 管理救美任务Bean和救美骑士Bean
  3. 在测试类TestKnight里创建测试方法 - testRescueDamselKnight()
  4. 执行测试方法 - testRescueDamselKnight()

四、Spring管理Bean的四种方式

  • 方式一:纯粹使用Spring配置文件(XML)来管理Bean
  • 方式二:注解符搭配Spring配置文件(XML)来管理Bean
  • 方式三:注解符搭配Spring配置类(Java)来管理Bean
  • 方式四:纯粹使用Spring配置类(Java)来管理Bean

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

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

相关文章

电商数据查询平台:母婴行业妈妈用品全网热销,头部品牌格局初现

以往,奶粉、纸尿裤这类产品基本就代表了整体母婴市场中的消费品。而如今,随着母婴行业的高速发展和消费升级,母婴商品的种类日益丰富,需求也不断深入。 在京东平台,母婴大品类中除了包含婴童相关的食品(奶粉…

面试个3年自动化测试,测试水平一言难尽。。。。

公司前段缺人,也面了不少测试,结果竟然没有一个合适的。 一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。 看简历很多都是3年工作经验,但…

飞塔Fortinet防火墙SSL VPN双因素身份认证(2FA)方案

作为行业领先的防火墙厂商,飞塔Fortinet结合了高性能 VPN 功能,代表了网络安全的新概念。其中飞塔Fortinet防火墙 SSL VPN 因其突出的安全性能而被广泛应用在远程办公场景中。但在 SSL VPN 登录时用户仅需输入用户名和固定的静态密码,若遭遇账…

AWS S3常用功能总结回顾

本文用于记录与分享工作中遇到的s3的基础使用方法 工具介绍 本文采用s3Browser对s3进行可视化管理 基本元素 端点Endpoint桶Bucket账号AccessKey密码SecreteKey 说明 本文基于JavaSDK进行演示代码,下文的代码都只包含核心部分,异常捕捉、流关闭、…

【图像分类】卷积神经网络之LeNet5网络模型结构详解

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 1. 前言 LeNet5算法是LeCun在1998年提出的卷积神经网络模型。大约90年代,由于支持向量机等算法的发现,深度学习…

django项目实战一(django+bootstrap实现增删改查)

目录 一、创建django项目 二、修改默认配置 三、配置数据库连接 四、创建表结构 五、在app当中创建静态文件 六、页面实战-部门管理 1、实现一个部门列表页面 2、实现新增部门页面 3、实现删除部门 4、实现部门编辑功能 七、模版的继承 1、创建模板layout.html 1&…

创建虚拟机,安装CentOS

在VMware上面创建虚拟机 文件->新建虚拟机 选定 自定义的高级,下一步 下一步 检查选定稍后安装操作系统 下一步 选择Linux,CentOS 7 64位 创建虚拟机名称,以及在存放该虚拟机的位置 选择处理器的数量和每个处理器的内核数量 …

Linux入门操作指令介绍(配合Windows理解)

(1)如果不会装虚拟机和Ubuntu,建议跟着韦东山老师的课程来安装,绝大多数事情他都帮你做好了。跟着视频的来即可。韦东山老师视频链接。(2)跟着视频做可能还是会有很多不懂的,比如什么是Shell &a…

【论文速递】ACL 2021-CLEVE: 事件抽取的对比预训练

【论文速递】ACL 2021-CLEVE: 事件抽取的对比预训练 【论文原文】:CLEVE: Contrastive Pre-training for Event Extraction 【作者信息】:Wang, Ziqi and Wang, Xiaozhi and Han, Xu and Lin, Yankai and Hou, Lei and Liu, Zhiyuan and Li, Peng and …

【离散数学】3. 代数系统

1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 代数系统:把一些形式上很不相同的代数系统,用统一的方法描述、研究、推理,从而得到反映出他们共性的一些结论,在将结论运用到具体的代数系统中 系统:运算研究对象 运算&…

薪资9k!三年教培老师被优化,选择转行软件测试实现再就业

大学毕业后,我在一家教培机构当了三年的高中英语老师。只是后来我怎么也没想到,这三年间形成的社交圈子和职场经验,仅仅用了三个月便发生了天翻地覆的变化。 ——贵阳校区优秀学员 小Z 01.初入职场 2019年的初夏,我和众多应届毕…

利用redis实现缓存、发布订阅、分布式锁功能

Redis是一个内存键值存储数据库,通常用于缓存、会话管理、消息队列等场景。以下是一些常见的Redis使用场景:1.缓存:将常用的数据缓存在Redis中,以减少对数据库的访问次数,提高应用程序的性能。2.会话管理:使…

用Python采集热门城市景点数据并简单制作数据可视化图

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 模块使用: 爬虫部分: requests parsel csv 数据分析部分: pandas pyecharts 如何安装模块: win R 输入 cmd 输入安装命令: pip install 模块名 回车 pycharm里面安装 terminal 输入安装命令…

OSI七层网络模型

应用层 定义了各种应用协议规范数据格式:HTTP协议、HTTPS协议、FTP协议、DNS协议、TFTP、SMTP等等。 表示层 翻译工作。提供一种公共语言、通信。 会话层 1、可以从校验点继续恢复数据进行重传。——大文件 2、自动收发,自动寻址的功能。 传输层 1、…

Qt下实现不规则形状窗口显示

文章目录前言一、资源文件的添加二、初始化窗口三、重写paintEvent函数实现窗口重绘四、重写QMouseEvent相关函数实现不规则窗口的移动及关闭五、demo完整代码六、下载链接总结前言 本文实现了Qt下显示两个不规则形状的窗口demo,其中有Qt的窗口对话框和QPaintEvent…

基于minikube快速搭建kubernetes单节点环境

一、说明 本文主要介绍在 Centos7 环境下基于 Minikube 来快速部署 Kubernetes 单节点集群环境,并在浏览器上访问部署在 k8s 上的 dashboard 服务。 二、Minikube 介绍 Minikube 是一个基于go语言开发,易于在本地运行 Kubernetes 的工具,可…

《mysql技术内幕:innodb存储引擎》笔记

任何时候Why都比What重要;不要相信任何的“神话”,学会自己思考;不要墨守成规,大部分人都知道的事情可能是错误的;不要相信网上的传言,去测试,根据自己的实践做出决定;花时间充分地思考,敢于提出质疑。1.MYSQL被设计为一个单进程多…

(三十七)vue 项目中常用的2个Ajax库

文章目录axios实现vue-resource实现上一篇:(三十六)Vue解决Ajax跨域问题 先看一个github搜索案例 有一个搜索框,输入相关用户名,就能模糊搜索出用户,展现到下方 第一步:我们用到了第三方样式库…

36、基于51单片机频率计 LCD 1602显示系统设计

摘要 数字频率计是一种基本的测量仪器。它被广泛应用于航天、电子、测控等领域,还被应用在计算机及各种数学仪表中。一般采用的是十进制数字,显示被测信号频率。基本功能是测量正弦信号,方波信号以及其他各种单位时间内变坏的物理量。由于其…

【沐风老师】为你推荐18个免费3dMAX插件和脚本

在所有 3D 软件中,3dMax的历史特别引人注目,有许多有趣的里程碑和突破点。自 1990 年推出以来,3dMax 一直是Autodesk公司的支柱产品之一。作为行业标准,它是高端项目和各种高级用途的首选 3D 软件之一。 如果你已经在使用3dMax&a…