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

http://www.lryc.cn/news/322470.html

相关文章:

  • 【研究僧总结】回顾第1095个创作日
  • QT(6.5) cmake构建C++编程,调用python
  • Java开发从入门到精通(九):Java的面向对象OOP:成员变量、成员方法、类变量、类方法、代码块、单例设计模式
  • 通过 Socket 手动实现 HTTP 协议
  • 探索数据结构:双向链表的灵活优势
  • 记录一次服务器内存使用率过高达到90%告警问题排查。
  • 基于react native的自定义轮播图
  • Jetson入坑记实
  • 算法系列--递归
  • 【JS】替换文本为emjio表情
  • Solr完结版
  • 外包干了5天,技术退步明显。。。。
  • Cronos zkEVM 基于 Covalent Network(CQT)数据可用性 API,推动其 Layer2 DeFi 生态更好地发展
  • 基于SpringBoot的高校办公室行政事务管理系统
  • Linux系统及操作 (04)
  • 粒子群算法 - 目标函数最优解计算
  • 关于MySQL数据库的学习3
  • 笔试题——得物春招实习
  • 动手做简易版俄罗斯方块
  • 【极简无废话】open3d可视化torch、numpy点云
  • C语言经典算法-6
  • 【计算机考研】杭电 vs 浙工大 怎么选?
  • 激活函数
  • 使用Jackson进行 JSON 序列化和反序列化
  • Linux/Uinx 系统编程:定时器以及时钟同步
  • (Ubuntu中调用相机花屏)Astra plus深度相机--rgb彩色图像花屏解决方法之一
  • iPaaS平台能帮助企业解决什么问题?
  • 数学建模(灰色关联度 python代码 案例)
  • 【DP】第十四届蓝桥杯省赛C++ B组《接龙数列》(C++)
  • 文件包含漏洞(input、filter、zip)