当前位置: 首页 > news >正文

Java复习06 Spring 代码概念

Java复习06 Spring 代码概念

1.基本代码

@Component 
public class CommunityApplicationTests implements ApplicationContextAware {private ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}}

你得到了一张特别的通行证,这张通行证可以让你进入一个有很多不同房间的大房子,每个房间都有不同的玩具和游戏。这个大房子就像一个游乐场,而你的通行证就是一种特殊的许可,让你可以去任何一个房间玩耍。

在这段代码中,CommunityApplicationTests这个名字相当于你的名字,而@Component就像是贴在你衣服上的一枚徽章,告诉大家你可以自由地进入这个大房子的任何一个房间。

现在,因为你有这枚徽章,大房子的看门人(在这里就是Spring框架)知道了你的特殊权限。看门人给了你一张地图(这就是ApplicationContext),这张地图上标记了所有房间的位置,告诉你每个房间里有什么玩具和游戏。

这段代码里的setApplicationContext方法就像是看门人把地图交给你的方式。一旦你收到地图,你就可以随时查看,并决定你想去哪个房间,玩哪些玩具。

具体来说:

  • @Component:这是告诉Spring看门人,“嘿,这个孩子(CommunityApplicationTests)有特别的通行证。”
  • implements ApplicationContextAware:这是告诉看门人,“这个孩子知道如何使用房子里的地图。”
  • setApplicationContext(ApplicationContext applicationContext):这个方法就是看门人把地图交给这个孩子的动作。
  • private ApplicationContext applicationContext;:这是孩子的口袋,存着看门人给的地图,随时可以拿出来看。

所以,每当这个孩子(CommunityApplicationTests)进入大房子(Spring框架),看门人就会把地图(ApplicationContext)交给他,让他知道怎么去任何一个房间(使用程序里的功能和服务)。

2.加入新方法

	@Testpublic void testApplicationContext() {System.out.println(applicationContext);AlphaDao alphaDao = applicationContext.getBean(AlphaDao.class);System.out.println(alphaDao.select());alphaDao = applicationContext.getBean("alphaHibernate", AlphaDao.class);System.out.println(alphaDao.select());}

比方说你现在拿着那张地图,准备去大房子里探险。这段代码就像是你探险的故事。

  • @Test:这好比是你在说,“嘿,我要开始我的探险了!”
  • System.out.println(applicationContext);:这就像是你打开地图,然后大声说,“看,这是我能去的所有房间的地图!”
  • AlphaDao alphaDao = applicationContext.getBean(AlphaDao.class);:想象一下,AlphaDao是房子里的一个游戏室,你告诉地图,“我想去AlphaDao游戏室。”于是地图就指引你去那个房间。 第一个单词加上AlphaDao 表示声明变量类型
  • System.out.println(alphaDao.select());:当你进入AlphaDao游戏室后,你选择了一个游戏并且玩了起来。这行代码就好比是你享受游戏并告诉大家,“哈哈,我玩的是这个游戏!”
  • alphaDao = applicationContext.getBean("alphaHibernate", AlphaDao.class);:接着你想去玩一个叫“alphaHibernate”的特别版本的游戏。你再次对地图说,“现在带我去alphaHibernate游戏室。”地图就带你去了那个房间。两个AlphaDao存在的原因是因为我们两次都想要AlphaDao的玩具,只不过第二次我们非常具体地说了我们想要的版本的名字。而且,即使我们没有在第二次请求中重新声明变量类型,alphaDao变量的类型仍然是AlphaDao,因为我们第一次已经声明过了。
  • System.out.println(alphaDao.select());:你在alphaHibernate游戏室找到了一个不同的游戏,然后你又玩了起来,并且又一次高兴地告诉大家你在做什么。

在这个故事里,Ioc容器(控制反转容器)就像是负责整个大房子的管理人。他知道所有的游戏室在哪里,所有的游戏在哪里,并且负责给你你想要的东西。当你想要进入一个游戏室或者玩一个游戏时,你不用自己去找,管理人会把它们带到你面前。这就是控制反转的意思:你不用控制去哪里找东西,反而是东西会被带给你。

在编程中,这意味着编程不需要自己创建和管理对象(游戏或游戏室),而是由Spring框架(大房子的管理人)来帮你处理。你只需要告诉Spring你需要什么,Spring就会给你准备好,并且当你需要的时候给你。这样你就可以专注于你的游戏(编程任务)而不是寻找游戏(管理对象)。

3.继续加入新方法

@Test
public void testBeanManagement() {AlphaService alphaService = applicationContext.getBean(AlphaService.class);System.out.println(alphaService);alphaService = applicationContext.getBean(AlphaService.class);System.out.println(alphaService);
}

我们对看门人说:“请给我一个叫AlphaService的玩具。”看门人点点头,转身去大房子里面找,然后魔法般地给我们带来了一个AlphaService玩具。我们拿到玩具后,很高兴。

我们再次对看门人说:“我还想要一个AlphaService的玩具。”看门人再次进去,然后又拿出来了一个AlphaService的玩具给我们。

4.加入 @Autowired

	@Autowired@Qualifier("alphaHibernate")private AlphaDao alphaDao;@Autowiredprivate AlphaService alphaService;@Autowiredprivate SimpleDateFormat simpleDateFormat;@Testpublic void testDI() {System.out.println(alphaDao);System.out.println(alphaService);System.out.println(simpleDateFormat);}

你正在准备一个生日派对,你需要很多东西:比如蛋糕(alphaDao),音乐(alphaService)和派对上的时钟(simpleDateFormat)来确保一切按计划进行。在这个例子中,你不需要亲自准备这些东西,你有一个魔法精灵(@Autowired)可以帮你自动准备这一切。

这里,“@Autowired”就像是魔法精灵,它可以自动地给你想要的东西。在生日派对的例子中,它会帮你自动找到蛋糕(alphaDao),音乐(alphaService),和时钟(simpleDateFormat)。

@Qualifier("alphaHibernate")”是一个特殊的魔法咒语,告诉魔法精灵你想要的蛋糕是特别的,名字叫“alphaHibernate”。这样精灵就知道不是随便一个蛋糕,而是一个特定的蛋糕。

这个“@Test”就是我们生日派对开始的信号。在这个派对上,我们检查魔法精灵给我们准备的东西:

  • 当我们说“System.out.println(alphaDao);”,这就像是我们在检查蛋糕,看看它是不是正确的那一个。
  • 当我们说“System.out.println(alphaService);”,这就像是我们在试听音乐,确认它是不是我们喜欢的那种。
  • 当我们说“System.out.println(simpleDateFormat);”,这就像是我们在看时钟,确保它能正确显示时间。

所以,总结一下,这段代码就是一个自动化的帮手,确保你的派对上有对的蛋糕、音乐和时钟,这样你就可以轻松享受派对,不用担心这些细节。这就是JAVA编程中的依赖注入(DI)的魅力,它帮助我们自动连接和组织需要的部分,使得我们可以更专注于派对的乐趣,也就是编程的主要任务。

相关文章:

Java复习06 Spring 代码概念

Java复习06 Spring 代码概念 1.基本代码 Component public class CommunityApplicationTests implements ApplicationContextAware {private ApplicationContext applicationContext;Overridepublic void setApplicationContext(ApplicationContext applicationContext) thr…...

【研究僧总结】回顾第1095个创作日

目录 前言一. 机缘二. 日常三. 展望 前言 感觉刚过1024不久,现在又来个1095创作日 一. 机缘 研究僧一直在找平台做笔记,方便之后的回顾总结,也让各位网友见证你我的成长,相互学习 止不住的写文止不住的成长,大家共同…...

QT(6.5) cmake构建C++编程,调用python

一、注意事项 explicit c中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),承担了两个角色,构造器、类型转换操作符, c提供关键字explicit,阻止转换构造函数进行的隐式转换的发生&#…...

Java开发从入门到精通(九):Java的面向对象OOP:成员变量、成员方法、类变量、类方法、代码块、单例设计模式

Java大数据开发和安全开发 (一)Java的变量和方法1.1 成员变量1.2 成员方法1.3 static关键字1.3.1 static修饰成员变量1.3.1 static修饰成员变量的应用场景1.3.1 static修饰成员方法1.3.1 static修饰成员方法的应用场景1.3.1 static的注意事项1.3.1 static的应用知识…...

通过 Socket 手动实现 HTTP 协议

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...

探索数据结构:双向链表的灵活优势

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty’s blog 1. 前言 前面我们学习了单链表,它解决了顺序表中插入删除需…...

记录一次服务器内存使用率过高达到90%告警问题排查。

目录 一、前言二、问题排查处理三、 结尾 👩🏽‍💻个人主页:阿木木AEcru 🔥 系列专栏:Docker容器化部署系列 💹每一次技术突破,都是对自我能力的挑战和超越。 一、前言 一大早就有一…...

基于react native的自定义轮播图

基于react native的自定义轮播图 效果示例图示例代码 效果示例图 示例代码 import React, {useEffect, useRef, useState} from react; import {Animated,PanResponder,StyleSheet,Text,View,Dimensions, } from react-native; import {pxToPd} from ../../common/js/device;c…...

Jetson入坑记实

关于虚拟环境python与系统自带python目录下dist-packages与site-packages dist-packages:系统自带的python site-packages:自己安装的python 详细:dist-packages与site-packages_dist-packages和site-packages-CSDN博客 rtsp获取视频流(没…...

算法系列--递归

一.如何理解递归 递归对于初学者来说是一个非常抽象的概念,笔者在第一次学习时也是迷迷糊糊的(二叉树遍历),递归的代码看起来非常的简洁,优美,但是如何想出来递归的思路或者为什么能用递归这是初学者很难分析出来的 笔者在学习的过程中通过刷题,也总结出自己的一些经验,总结来…...

【JS】替换文本为emjio表情

最终效果展示 T1 T2 T3 T4 需求 把评论你好帅啊啊啊[开心][开心],[开心] 替换为图片 思路 正则match提取[开心]到一个数组数组去重创建img标签img标签转文本. 。例:(el.outerHTML),将el元素转文本字符串replaceAll…...

Solr完结版

Solr是基于Apache Lucene构建的用于搜索和分析的开源解决方案。提供可拓展索引、搜索功能、高亮显示和文字解析功能。本质是一个java web项目,内嵌Jetty服务器,安装方便。 请求Solr中的控制器,处理完数据后把结果相应给客户端 正向索引&#…...

外包干了5天,技术退步明显。。。。

说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…...

Cronos zkEVM 基于 Covalent Network(CQT)数据可用性 API,推动其 Layer2 DeFi 生态更好地发展

在一项旨在显著改善 DeFi 生态的战略举措中,Cronos 与 Covalent Network(CQT)携手合作,以期待 Cronos zkEVM 的推出。这一整合,预计将进一步降低以太坊生态系统的交易成本、提升交易速度,并带来更好的交易体…...

基于SpringBoot的高校办公室行政事务管理系统

采用技术 基于SpringBoot的高校办公室行政事务管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 功能清单 教师信息管理 办公室管理 办公物资管…...

Linux系统及操作 (04)

Linux系统及操作 (03) RPM 软件包 网络下载对应软件包光盘镜像文件,具备软件包 Windows 系统软件包的管理 可以指定安装位置安装是集中安装到一个目录Linux 系统 与 Windows 系统相反。 常见的软件包(生态)类型 电脑入侵99%都是通过软件…...

粒子群算法 - 目标函数最优解计算

粒子群算法概念 粒子群算法 (particle swarm optimization,PSO) 由 Kennedy 和 Eberhart 在 1995 年提出,该算法模拟鸟群觅食的方法进行寻找最优解。基本思想:人们发现,鸟群觅食的方向由两个因素决定。第一个是自己当初飞过离食物…...

关于MySQL数据库的学习3

目录 前言: 1.DQL(数据查询语言): 1..1基本查询: 1.2条件查询: 1.3排序查询: 1.3.1使用ORDER BY子句对查询结果进行排序。 1.3.2可以按一个或多个列进行排序,并指定排序方向(升序ASC或降序DESC&#…...

笔试题——得物春招实习

开幕式排练 题目描述 导演在组织进行大运会开幕式的排练,其中一个环节是需要参演人员围成一个环形。演出人员站成了一圈,出于美观度的考虑,导演不希望某一个演员身边的其他人比他低太多或者高太多。 现在给出n个参演人员的身高,问…...

动手做简易版俄罗斯方块

导读:让我们了解如何处理形状的旋转、行的消除以及游戏结束条件等控制因素。 目录 准备工作 游戏设计概述 构建游戏窗口 游戏方块设计 游戏板面设计 游戏控制与逻辑 行消除和计分 判断游戏结束 界面美化和增强体验 看看游戏效果 准备工作 在开始编码之前…...

免费跨平台开源音乐播放器:LX Music桌面版完全指南

免费跨平台开源音乐播放器:LX Music桌面版完全指南 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop 你是否正在寻找一款真正免费、功能强大且支持多平台的音乐播放软件…...

魔兽争霸III全能助手:让你的经典游戏重获新生

魔兽争霸III全能助手:让你的经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在忍受魔兽争霸III那4:3的窄屏视野&…...

PP-DocLayoutV3快速体验:上传图片即得分析结果,支持合同/论文/书籍

PP-DocLayoutV3快速体验:上传图片即得分析结果,支持合同/论文/书籍 1. 文档版面分析的实用价值 在日常工作中,我们经常需要处理各种文档:合同需要提取关键条款、论文需要分析结构、书籍需要数字化存档。传统的人工处理方式效率低…...

Blender3mfFormat插件深度解析:3D打印工作流中的关键技术实现与性能优化

Blender3mfFormat插件深度解析:3D打印工作流中的关键技术实现与性能优化 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 在3D打印行业蓬勃发展的今天&#xf…...

5分钟掌握B站视频智能转文字:从链接到可编辑文本的完整方案

5分钟掌握B站视频智能转文字:从链接到可编辑文本的完整方案 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 在当今信息爆炸的时代,Bil…...

【机器学习】从Log Loss到Cross-Entropy:二分类与多分类的损失函数本质解析

1. 从Log Loss到Cross-Entropy:损失函数的本质理解 第一次接触机器学习中的损失函数时,我被各种名词搞得晕头转向。特别是看到Log Loss(对数损失)、Logistic Loss(逻辑损失)和Cross-Entropy(交叉…...

FreeRTOS队列实战:从阻塞机制到中断安全通信

1. FreeRTOS队列的核心价值与应用场景 在嵌入式实时系统中,任务间的数据传递就像城市中的快递网络。FreeRTOS队列就是这个网络中的标准化快递箱,它解决了三个关键问题:数据安全传递、任务同步协调和资源竞争管理。想象一下,当你的…...

从生活案例到统计检验:正态分布、卡方分布、t分布、F分布及其检验方法全解析

1. 正态分布与Z检验:从身高测量到质量检测 生活中最常见的正态分布案例莫过于人类身高。假设我们测量1000名成年男性的身高,数据会呈现中间高、两侧低的钟形对称分布。这种"中间多、两头少"的分布特征,正是正态分布最直观的体现。正…...

Spring Kafka性能优化:7个技巧提升消息吞吐量

Spring Kafka性能优化:7个技巧提升消息吞吐量 【免费下载链接】spring-kafka Provides Familiar Spring Abstractions for Apache Kafka 项目地址: https://gitcode.com/gh_mirrors/spr/spring-kafka Spring Kafka作为Apache Kafka的Spring抽象实现&#xff…...

JSON语法结构

‌1、JSON 值类型‌1.1‌ 字符串(String)‌:必须用‌双引号‌包裹,如 "hello"。1.2‌ 数字(Number)‌:整数或浮点数,如 42、-3.14、1.23e4。1.3‌ 布尔值(Boolean)‌:true 或 false。1.4‌ 空值(Null)‌&…...