两个世界

初次接触编程的时候,我用C++写了一个程序,向控制台输出Hello World。一时之间兴奋不已,觉得好生神奇。于是,编程的世界打开了,再也关不住。现在,让我们也以这样一个Hello World为引,开启我们的Spring之旅。为此,请按以下步骤新建hello-world项目:
1.打开IntelliJ IDEA,在欢迎界面上点击New Project按钮,打开New Project对话框。

2.选择左边面板Java那栏,并于右边面板选好JDK

3.点击Next按钮,跳到下图这个步骤。这个步骤无需填写任何信息。

4.点击Next按钮,设置Project name为hello-world

5.点击Finish按钮,完成创建。

项目建好之后,我们还需新建一个Java包来存放类。为此,请右击hello-world > src弹出上下文菜单;点击New > Package打开New Package对话框;输入com.dream,按回车键完成包的创建。

现在,一切准备就绪,可以开始写代码了。

我们的目标是写一个程序,向控制台输出Hello World。于是,我们需要一个能够说话的人。自然而然的,我们需要新建一个Person类。而这,可以右击com.dream包弹出上下文菜单;点击New > Java Class打开New Java Class对话框;选择Class,输入Person按回车键完成新建之后实现如下:

1 package com.dream;
2 
3 public class Person {
4     public void speak(String word) {
5         System.out.println(word);
6     }
7 }

该类非常简单,只定义了 public void speak(String word) 方法,向控制台输出想说的话。之后,我们只需创建Person类的实例,调用实例的speak方法输出Hello World就行。创建Person类的实例的方式有两种:一种是传统的;一种是Spring的。

按照传统的方式,我们需要自己创建类的实例,调用实例的方法输出Hello World。基于这些,请新建一个Main类,实现如下:

1 package com.dream;
2 
3 public class Main {
4     public static void main(String[] args) {
5         var person = new Person();
6         person.speak("Hello World!");
7     }
8 }

写完之后即可运行程序。为此,请:
1.点击右上角的Add Configuration...按钮,打开Run/Debug Configurations对话框。

2.点击左上角的+按钮,在弹出的Add New Configuration面板点击Application,新建Application配置。

3.设置Name为hello-world,Main class为com.dream.Main

4.点击OK按钮完成配置。
5.点击Add Configuration按钮右边的Run按钮运行程序,输出如下:

这就是我们非常熟悉的传统的写法。格外令人好奇的是,同样的功能按照Spring的方式能够怎么实现呢?毫无疑问,这是一个全新的话题,也是一个新鲜有趣的话题,更是一个我们最想了解的话题。只是开始采用Spring的方式进行实现之前,我们还需做些准备。而这准备,首先自然是下载Spring Framework (版本 5.2.0):https://repo.spring.io/libs-release-local/org/springframework/spring/5.2.0.RELEASE/

打开链接下载spring-5.2.0.RELEASE-dist.zip文件解压之后,可以看到里面有个libs文件夹。libs文件夹里存有这些JAR包:
01.spring-aop-5.2.0.RELEASE.jar
02.spring-aop-5.2.0.RELEASE-javadoc.jar
03.spring-aop-5.2.0.RELEASE-sources.jar
04.spring-aspects-5.2.0.RELEASE.jar
05.spring-aspects-5.2.0.RELEASE-javadoc.jar
06.spring-aspects-5.2.0.RELEASE-sources.jar
07.spring-beans-5.2.0.RELEASE.jar
08.spring-beans-5.2.0.RELEASE-javadoc.jar
09.spring-beans-5.2.0.RELEASE-sources.jar
10.spring-context-5.2.0.RELEASE.jar
11.spring-context-5.2.0.RELEASE-javadoc.jar
12.spring-context-5.2.0.RELEASE-sources.jar
13.spring-context-indexer-5.2.0.RELEASE.jar
14.spring-context-indexer-5.2.0.RELEASE-javadoc.jar
15.spring-context-indexer-5.2.0.RELEASE-sources.jar
16.spring-context-support-5.2.0.RELEASE.jar
17.spring-context-support-5.2.0.RELEASE-javadoc.jar
18.spring-context-support-5.2.0.RELEASE-sources.jar
19.spring-core-5.2.0.RELEASE.jar
20.spring-core-5.2.0.RELEASE-javadoc.jar
21.spring-core-5.2.0.RELEASE-sources.jar
22.spring-expression-5.2.0.RELEASE.jar
23.spring-expression-5.2.0.RELEASE-javadoc.jar
24.spring-expression-5.2.0.RELEASE-sources.jar
25.spring-instrument-5.2.0.RELEASE.jar
26.spring-instrument-5.2.0.RELEASE-javadoc.jar
27.spring-instrument-5.2.0.RELEASE-sources.jar
28.spring-jcl-5.2.0.RELEASE.jar
29.spring-jcl-5.2.0.RELEASE-javadoc.jar
30.spring-jcl-5.2.0.RELEASE-sources.jar
31.spring-jdbc-5.2.0.RELEASE.jar
32.spring-jdbc-5.2.0.RELEASE-javadoc.jar
33.spring-jdbc-5.2.0.RELEASE-sources.jar
34.spring-jms-5.2.0.RELEASE.jar
35.spring-jms-5.2.0.RELEASE-javadoc.jar
36.spring-jms-5.2.0.RELEASE-sources.jar
37.spring-messaging-5.2.0.RELEASE.jar
38.spring-messaging-5.2.0.RELEASE-javadoc.jar
39.spring-messaging-5.2.0.RELEASE-sources.jar
40.spring-orm-5.2.0.RELEASE.jar
41.spring-orm-5.2.0.RELEASE-javadoc.jar
42.spring-orm-5.2.0.RELEASE-sources.jar
43.spring-oxm-5.2.0.RELEASE.jar
44.spring-oxm-5.2.0.RELEASE-javadoc.jar
45.spring-oxm-5.2.0.RELEASE-sources.jar
46.spring-test-5.2.0.RELEASE.jar
47.spring-test-5.2.0.RELEASE-javadoc.jar
48.spring-test-5.2.0.RELEASE-sources.jar
49.spring-tx-5.2.0.RELEASE.jar
50.spring-tx-5.2.0.RELEASE-javadoc.jar
51.spring-tx-5.2.0.RELEASE-sources.jar
52.spring-web-5.2.0.RELEASE.jar
53.spring-web-5.2.0.RELEASE-javadoc.jar
54.spring-web-5.2.0.RELEASE-sources.jar
55.spring-webflux-5.2.0.RELEASE.jar
56.spring-webflux-5.2.0.RELEASE-javadoc.jar
57.spring-webflux-5.2.0.RELEASE-sources.jar
58.spring-webmvc-5.2.0.RELEASE.jar
59.spring-webmvc-5.2.0.RELEASE-javadoc.jar
60.spring-webmvc-5.2.0.RELEASE-sources.jar
61.spring-websocket-5.2.0.RELEASE.jar
62.spring-websocket-5.2.0.RELEASE-javadoc.jar
63.spring-websocket-5.2.0.RELEASE-sources.jar

可以看到Spring Framework是模块化的,总共包含21个模块。常见的有Spring容器,Spring MVC,Spring JDBC,Spring AOP,等等。每个模块包含3个JAR包:一个是编译好的字节码文件;一个是相应模块的文档;一个是相应模块的源代码。使用Spring Framework之前,我们需把这些JAR包添加到我们的项目中。为此,请:
1.把libs文件夹复制到项目的根目录hello-world中。
2.右击hello-world弹出上下文菜单,点击Open Module Settings打开Project Structure对话框。

3.左边面板选择Modules,右边面板选择Dependencies;点击+按钮,点击JARs or Directories...打开Attach Files or Directories对话框。

4.选择libs目录,点击OK按钮返回Project Structure对话框。

5.点击OK按钮完成JAR包的添加。

现在,一切准备就绪。该来瞧瞧采用Spring的方式如何实现Hello World了。

非常新鲜非常有趣的是,采用Spring的方式,我们无需自己创建类的实例;而是提供一些信息告诉Spring我们需要创建哪些类的实例,再由Spring根据我们提供的信息完成实例的创建。问题在于,我们应该怎样告诉Spring这些信息呢?

没错,通过配置文件。

我们把需要创建哪些类的实例的信息写在配置文件里,再把配置文件交给Spring。Spring读取配置文件之后就能知道具体需要创建哪些类的实例了。

那么,配置文件应该怎么写呢?

首先,我们需要创建一个目录用于存放配置文件。为此,请右击hello-world > src弹出上下文菜单;点击New > Package打开New Package对话框;输入resources,按回车键完成创建。之后右击resources目录弹出上下文菜单;点击New > XML Configuration File > Spring Config打开New File对话框;输入app-config,按回车键完成配置文件app-config.xml的创建之后修改如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xsi:schemaLocation="
 5        http://www.springframework.org/schema/beans
 6        http://www.springframework.org/schema/beans/spring-beans.xsd">
 7 
 8     <bean id="person" class="com.dream.Person" />
 9 
10 </beans>

就这样,配置文件写好了,可以把它交给Spring了。为此,请修改Main类如下:

 1 package com.dream;
 2 
 3 import org.springframework.context.support.*;
 4 
 5 public class Main {
 6     public static void main(String[] args) {
 7         var configFile = "resources\\app-config.xml";
 8         try (var context = new ClassPathXmlApplicationContext(configFile)) {
 9             var person = context.getBean("person", Person.class);
10             person.speak("Hello World!");
11         }
12     }
13 }

看到了吧?我们把配置文件交给Spring应用上下文(Spring Application Context),Spring应用上下文读取配置文件之后就把类的实例创建出来了。随后,我们调用getBean方法从Spring应用上下文里获取类的实例,调用实例的方法输出Hello World

于是,采用Spring的方式实现的Hello World完成了。运行程序之后,控制台随即输出Hello World。一切是那样的独特,那样的新鲜,那样的奇妙,那样的有趣!

这时,大家可能会说:“哎呀,我的程序是跑起来了,而且也输出了Hello World;可是,配置文件和应用上下文的代码不是很懂呀,怎么办?”大家别急,这里只是通过Hello World,让大家认识一下Spring,往后的章节我们会详细介绍配置文件,应用上下文和其它Spring相关的知识,到时大家就懂了。

通过Hello World,相信大家已经看到Spring和传统的方式的不同。只是Hello World太过简单了。通过Hello World,大家对Spring可能只是有个最初的印象,却体会不到Spring真正的魅力,更不知道Spring对企业级应用软件的开发到底简化了多少。毕竟就该例子而言,传统的方式代码更少,似乎更加简洁。但是,随着学习的深入,到了学习Spring MVC的时候,大家就能确切体会到Spring的魅力,以及Spring对于企业级应用软件的开发到底简化了多少了。所以,静下心来。让我们一点一点慢慢学习,一点一点慢慢体会Spring这样或那样的魅力。

返回目录    下载代码

posted @ 2020-04-07 10:30  林雪波  阅读(627)  评论(0编辑  收藏  举报