Java企业开发学习笔记(4)采用Java配置类管理Bean

news2024/11/26 12:15:27

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

文章目录

  • 一、采用Java配置类管理Bean
    • 1.1 创建子包
    • 1.2 创建杀龙任务类
    • 1.3 创建勇敢骑士类
    • 1.4 创建Spring配置类
    • 1.5 创建测试类
    • 1.6 运行测试类
  • 二、课堂练习
    • 2.1 创建救美任务类和救美骑士类
    • 2.2 修改Spring配置类 - 管理救美任务Bean和救美骑士Bean
    • 2.3 在testKnight()方法里添加救美骑士
    • 2.4 执行测试方法 - testKnight()


一、采用Java配置类管理Bean

1.1 创建子包

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

1.2 创建杀龙任务类

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

public class SlayDragonQuest {
    public void embark() {
        System.out.println("执行🗡🏹💣🐉任务...");
    }
}

1.3 创建勇敢骑士类

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

public class BraveKnight {
    private String name; // 骑士姓名
    private SlayDragonQuest slayDragonQuest; // 杀龙任务

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

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

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

1.4 创建Spring配置类

  • 在day04子包里创建Spring配置类 - SpringConfig
package cn.kox.spring.day04;

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

@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;
    }
}

1.5 创建测试类

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

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

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();
    }
}

1.6 运行测试类

在这里插入图片描述

二、课堂练习

2.1 创建救美任务类和救美骑士类

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

public class RescueDamselQuest {
    public void embark() {
        System.out.println("执行👮‍️💕👰任务...");
    }
}
  • RescueDamselKnight类 - 救美骑士类
package cn.kox.spring.day04;

public class RescueDamselKnight {
    private String name;
    private RescueDamselQuest rescueDamselQuest;

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

    public void setRescueDamselQuest(RescueDamselQuest rescueDamselQuest) {
        this.rescueDamselQuest = rescueDamselQuest;
    }

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

2.2 修改Spring配置类 - 管理救美任务Bean和救美骑士Bean

package cn.kox.spring.day04;

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

@Configuration // 表明是Spring配置类
public class SpringConfig {
    @Bean // 创建名为slayDragonQuest的Bean
    public SlayDragonQuest slayDragonQuest() {
        return new SlayDragonQuest();
    }

    @Bean
    public RescueDamselQuest rescueDamselQuest() {
        return new RescueDamselQuest();
    }

    @Bean // 创建名为braveKnight的Bean
    public BraveKnight braveKnight() {
        BraveKnight braveKnight = new BraveKnight();
        braveKnight.setName("罗宾汉");
        braveKnight.setSlayDragonQuest(slayDragonQuest());
        return braveKnight;
    }

    @Bean
    public RescueDamselKnight rescueDamselKnight() {
        RescueDamselKnight rescueDamselKnight = new RescueDamselKnight();
        rescueDamselKnight.setName("尼古拉四德中间带个K");
        rescueDamselKnight.setRescueDamselQuest(rescueDamselQuest());
        return rescueDamselKnight;

    }
}

2.3 在testKnight()方法里添加救美骑士

    package cn.kox.spring.day04;

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

    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();

            RescueDamselKnight knight1 = (RescueDamselKnight) context.getBean("rescueDamselKnight");
            knight1.embarkOnQuest();
        }

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

2.4 执行测试方法 - testKnight()

在这里插入图片描述

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

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

相关文章

BERT模型系列大全解读

前言 本文讲解的BERT系列模型主要是自编码语言模型-AE LM(AutoEncoder Language Model):通过在输入X中随机掩码(mask)一部分单词,然后预训练的主要任务之一就是根据上下文单词来预测这些单词,从…

阅读笔记7——Focal Loss

一、提出背景 当前一阶的物体检测算法,如SSD和YOLO等虽然实现了实时的速度,但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢?何凯明等人将其归咎于正、负样本的不平衡,并基于此提出了新的损失函数Focal L…

JUC并发编程(上)

✨作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 学习地址 写在最前 JUC(Java Util Concurrent)学习内容框架: #mermaid-svg-r5jN6ICeVruSjU0I …

MySQL一隐式转换

我相信90%以上的同学们在平时开发时,或多或少都被隐式转换(CONVERT_IMPLICIT)坑过,甚至测出bug前你都浑然不知。你还别不信,“无形之刃,最为致命!” mysql> SELECT * from t_user; ---------…

【LeetCode】剑指 Offer 11. 旋转数组的最小数字 p82 -- Java Version

题目链接:https://leetcode.cn/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/ 1. 题目介绍(11. 旋转数组的最小数字) 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 给你一个可能存在 重复 元素值…

关于微前端,你想知道的都在这!

更多请关注微前端专题 https://codeteenager.github.io/Micro-Frontends/ 介绍 微前端官网:https://micro-frontends.org/ 问题:如何实现多个应用之间的资源共享? 之前比较多的处理方式是npm包形式抽离和引用,比如多个应用项目之…

浅谈Redisson实现分布式锁的原理

1.Redisson简介 Redis 是最流行的 NoSQL 数据库解决方案之一,而 Java 是世界上最流行(注意,我没有说“最好”)的编程语言之一。虽然两者看起来很自然地在一起“工作”,但是要知道,Redis 其实并没有对 Java…

windows共享文件夹(目录)(SMB服务)

SMB服务,文件共享服务,俗称文件夹(目录)、打印机等共享 一、创建共享用户 windos系统中,文件夹共享需要设置指定用户与密码,通过输入用户和密码进行连接,在设置共享时系统中有Everyone所有人设…

【Linux学习笔记】1.Linux 简介及安装

前言 本章介绍Linux及其安装方法。 Linux 简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多…

【基础语法】JavaScript 全栈体系(四)

JavaScript 基础 第五章 类型转换 一、为什么需要类型转换? JavaScript是弱数据类型: JavaScript也不知道变量到底属于那种数据类型,只有赋值了才清楚。 坑: 使用表单、prompt 获取过来的数据默认是字符串类型的,此…

JVM及其内存模型

目录儿一、JVM1.1 为什么需要JVM?1.2 JVM内存模型1.3 堆(Heap)1.4 方法区(Method Area)1.5 虚拟机栈(JVM Stack)1.6 本地方法栈(Native Stack)1.7 程序计数器(PC Register)一、JVM JVM是Java V…

I-Cache 和 D-Cache

定义ICache和DCache是一种内存,虽然目前接触了好几种内存,寄存器,DDR等,它们在物理上的工作原理虽然不同,但是访问属性却很像。在速度上CPU > 寄存器 > Cache > SRAM >PS&…

100种思维模型之六顶帽思维模型-018

工作中,经常开会,开会于工作当然无可厚非。 可是,现实中的会议,往往存在效率低,效果不佳的问题。如,连续开一天的研究讨论会,最后没能讨论出个所以然,又或者会议有了决策&#xff0c…

QT_dbus(ipc进程间通讯)

QT_dbus(ipc进程间通讯) 前言: 参考链接: https://www.cnblogs.com/brt3/p/9614899.html https://blog.csdn.net/weixin_43246170/article/details/120994311 https://blog.csdn.net/kchmmd/article/details/118605315 一个大型项目可能需要多个子程序同…

《计算机网络:自顶向下方法》实验5:ARP协议分析 Wireshark实验

实验13:ARP协议分析 1 What is the 48-bit Ethernet address of your computer? 00:d0:59:a9:3d:68 2 What is the 48-bit destination address in the Ethernet frame? Is this the Ethernet address of gaia.cs.umass.edu? (Hint: the answer is no). What device has …

推荐算法—widedeep原理知识总结代码实现

wide&deep原理知识总结代码实现1. Wide&Deep 模型的结构1.1 模型的记忆能力1.2 模型的泛化能力2. Wide&Deep 模型的应用场景3. Wide&Deep 模型的代码实现3.1 tensorflow实现3.2 pytorch实现今天,总结一个在业界有着巨大影响力的推荐模型&#xff0c…

设计模式.工厂模式.黑马跟学笔记

设计模式.工厂模式4.创建型模式4.2 工厂模式4.2.1 概述4.2.2 简单工厂模式4.2.2.1 结构4.2.2.2 实现4.2.2.4 优缺点4.2.2.3 扩展4.2.3 工厂方法模式4.2.3.1 概念4.2.3.2 结构4.2.3.3 实现4.2.3.4 优缺点4.2.4 抽象工厂模式4.2.4.1 概念4.2.4.2 结构4.2.4.2 实现4.2.4.3 优缺点4…

C语言进阶(六)—— 结构体

1. 结构体基础知识1.1 结构体类型的定义struct Person{char name[64];int age; };typedef struct _PERSON{char name[64];int age; }Person;注意:定义结构体类型时不要直接给成员赋值,结构体只是一个类型,编译器还没有为其分配空间&#xff0…

【Kubernetes 入门实战课】Day02——初识容器

系列文章目录 【Kubernetes 入门实战课】Day01——搭建kubernetes实验环境(一) 文章目录系列文章目录前言一、Docker的诞生二、Docker的形态1、Docker Desktop2、Docker Engine二、Docker的安装1、服务器连接外网安装2、服务器不通外网三、Docker的使用三、Docker的架构总结前…

JavaWeb11-死锁

目录 1.死锁定义 1.1.代码演示 1.2.使用jconsole/jvisualvm/jmc查看死锁 ①使用jconsole:最简单。 ②使用jvisualvm:(Java虚拟机)更方便,更直观,更智能,更高级,是合适的选择。 …