当前位置: 首页 > 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个参演人员的身高,问…...

动手做简易版俄罗斯方块

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

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

Java入门学习详细版(一)

大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM&#xff09…...

Java编程之桥接模式

定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...