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