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)的魅力,它帮助我们自动连接和组织需要的部分,使得我们可以更专注于派对的乐趣,也就是编程的主要任务。

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

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

相关文章

QT 异常处理

在 Qt 中,异常处理主要是通过 C 的异常处理机制来实现的,你可以在 Qt 应用程序中使用 try-catch 块来捕获和处理异常。在使用 Qt 的过程中,你可能会遇到以下情况可以使用异常处理: Qt 中的文件操作:类似于上一个例子中…

C语言经典面试题目(二十三)

1、解释一下C语言中的内存管理函数malloc和free的作用。 malloc:malloc函数用于动态分配内存空间,它接受一个参数,即所需内存的字节数,并返回一个指向分配内存的指针。如果内存分配成功,则返回指向分配内存的指针&…

vue3与Electron构建跨平台应用(webpack)

一、创建vue3项目 vue create vue3_webpack_electron 二、安装Electron npm install --save-dev electron Electron 三、vue add electron-builder vue add electron-builder

04 JDBCUtil

静态代码块加载properties配置文件,注册驱动 静态方法创建连接 静态方法关闭,一个方法关connection,statement,另一个方法多关一个resultSet package com.aistart.tech.until;import java.io.IOException; import java.sql.*; import java.ut…

Git和本地仓库托管到gitee

Git作用:记录代码内容,切换代码版本,实现多人开发 Git安装: 打开bash端 命令:git-v(查看版本) 配置用户信息 git config --global user.name “用户名” git config --global user.email "邮箱名…

Spring Boot + Vue 实现文件导入导出功能

文章目录 1、概述2、后端实现(Spring Boot)3、前端实现(Vue)4、总结 1、概述 ​ 在现代Web应用开发中,文件的导入导出是一个常见的需求。Spring Boot作为后端开发的强大框架,搭配前端框架Vue,可…

颠覆传统:Web3如何塑造未来的数字经济

引言 近年来,随着数字化时代的到来,互联网已经成为人们生活中不可或缺的一部分。然而,随着技术的不断发展和社会的不断变迁,传统的Web2模式逐渐显露出一些弊端,如数据垄断、隐私泄露等问题,这促使人们寻求…

【数据结构】——线性表(顺序表加链表),万字解读(加链表oj详解)

前言 由于之前存在过对两者的区别考虑,所以把他们放在一起来说,更加容易区别和理解 对于有关线性表的概念这里就不展示了,这里主要是介绍线性表里面的这两个结构的知识点 一.顺序表 1.顺序表介绍 顺序表的存储结构和逻辑结构都是相邻的&a…

阿里云轻量应用服务器和ECS服务器有啥区别?2024年整理对比表

阿里云服务器ECS和轻量应用服务器有什么区别?轻量和ECS优缺点对比,云服务器ECS是明星级云产品,适合企业专业级的使用场景,轻量应用服务器是在ECS的基础上推出的轻量级云服务器,适合个人开发者单机应用访问量不高的网站…

02分布式搜索引擎ES

elasticsearch查询 1.DSL查询文档1.1.DSL查询分类1.2.全文检索查询1.3.精准查询1.4.地理坐标查询1.5.复合查询 2.搜索结果处理2.1.排序2.2.分页2.3.高亮2.4.总结 3.RestClient查询文档3.1.快速入门3.2.match查询3.3.精确查询3.4.布尔查询3.5.排序、分页3.6.高亮 1.DSL查询文档 …

JetPack之LiveData

目录 一、LiveData简介1.1 LiveData是什么? 二、LiveData使用2.1 LiveData基础使用2.2 LiveData搭配Service模拟后台消息2.3 LiveData在组件中的数据传递 三、LiveData应用场景 一、LiveData简介 1.1 LiveData是什么? LiveData是一种可观察的数据存储器…

L2-048 寻宝图 (DFS做法)

目录 1. 题目描述 输入格式: 输出格式: 输入样例: 输出样例: 2. 思路分析 3. 代码实现 原题链接:https://pintia.cn/problem-sets/994805046380707840/exam/problems/1649748772841508875?type7&page1 1.…

Golang 异步(bsd/linux)io

Golang 异步(bsd/linux)io 在日常开发中,读写文件的底层调用函数是syscall.Read/Write。一切都是围绕这两个函数展开的,不过有时候需要或者就是单纯想异步执行。liburing是linux上一个很好的原生异步io库,这里需要适配bsd派系的系统&#xf…

vue 中 清除form 校验状态

1 resetFields();清除全部校验状态数据 this.$refs.form.resetFields(); 2 resetFields() ;清除form的全部校验状态 this.$refs.form.clearValidate(); 3,清除固定的字段的校验 const field supplierName; // 要清除校验的字段名 cons…

iostream、fstream、sstream、string、vector、unordered_map、stack

iostream 用于输入输出操作&#xff0c;包含了处理标准输入输出流的功能&#xff08;例如&#xff0c;cin, cout, cerr等&#xff09;。 #include <iostream>int main() {int number;std::cout << "Enter a number: ";std::cin >> number;std::…

像uniapp image标签一样对图片进行缩放和裁剪

像uniapp image标签一样对图片进行缩放和裁剪 0 前言提示1 实现1.1 不保持纵横比缩放图片&#xff0c;使图片的宽高完全拉伸至填满 image 元素1.2 保持纵横比缩放图片&#xff0c;使图片的长边能完全显示出来。也就是说&#xff0c;可以完整地将图片显示出来。1.3 保持纵横比缩…

【DevOps实战篇】使用Portainer启动WordPress CMS堆栈应用

【DevOps实战篇】使用Portainer启动WordPress CMS堆栈应用 目录 【DevOps实战篇】使用Portainer启动WordPress CMS堆栈应用使用 Portainer 安装 WordPress 的要求什么是 Portainer使用 Portainer 安装 WordPress 的理由步骤1: 如何为 WordPress 设置 Portainer步骤2: 如何访问 …

Amuse .NET application for stable diffusion

Amuse github地址&#xff1a;https://github.com/tianleiwu/Amuse .NET application for stable diffusion, Leveraging OnnxStack, Amuse seamlessly integrates many StableDiffusion capabilities all within the .NET eco-system Welcome to Amuse! Amuse is a profes…

uni-app 中两个系统各自显示不同的tabBar

最近在一个uni-app项目中遇到一个需求,在登录页面成功登录以后需要判断身份,不同的身份的进入不同的tabBar页面,但是在uni-app项目中pages.json中的tabBar的list数组只有一个&#xff0c;且不能写成动态的,那如何实现这个需求呢?答案是需要我们自定义tabBar。 目录 1、我们确…

vue+elementUI实现树形穿梭框

1.实现效果 2.整体思路 将左侧选中的节点移动到右侧&#xff0c;还要保持树结构&#xff0c;意味着移动子节点&#xff0c;需要把该子节点对应的父节点甚至父节点的父节点一并移到右侧形成一个新的树结构&#xff0c;树结构的层级和原来的树保持一致&#xff0c;只是右侧展示…