我的第一个SpringBoot 项目——Hello World
2017-11-09 23:18
525 查看
上一篇简单介绍了如何快速创建一个Spring Boot项目,我们有了一个基本的项目结构:
首先,我们分析pom.xml
从dependencies中的内容,我们很容易找到了上一篇中,我们提到的两个组件web 和 thymeleaf。从pom文件的依赖配置中,我们发现全都一样,具有相同的结构,都有前缀“spring-boot-starter”。作为SpringBoot 四大神器之一的 starter,主要用于简化依赖,我们再也不用为依赖的版本和maven地址而发愁,springBoot总会为我们匹配它认为最优秀的版本(虽然有时候可能并不是我们想要的),让依赖的版本见鬼去吧,具有选择恐慌症的伙伴们该乐坏了。另外,我们还可以自己定义一个starter, 这部分内容这里暂时不作介绍。
其次,我们将重点放在 WebApplication.java 这个类上:
只有 简简单单的几行代码,一个几乎被我们忘掉 的main方法,没错就是它,main方法。大道至简,回到了我们刚学习开发语言时的第一个代码——main方法,在这里它依旧是项目启动的入口,执行着最原始的使命。
和老革命的寒暄到此结束,我们进入重点,重点关注一下新同志@SpringBootApplication 这个注解:
①@SpringBootConfiguration : 配置类,相当于 xml
②@EnableAutoConfiguration : 启用spring自动装配
③@ComponentScan : 和xml配置自动扫描效果一样,默认扫描当前包和所有子包(所以,启动类一定要放在最外层的包中)。
接下来,我们写一个Controller,来访问我们的Hello World!
就在cn.pw.pf.web下创建一个controller包,在写一个HelloWorldController类。
OK,我们HelloWorld!写完了,启动项目。直接在idea中运行WebApplication类的main()方法,注意观察控制台。
(小知识:SpringBoot启动时的banner 是可以 自定义的哦!有兴趣的可以了解一下,换一个自己喜欢的banner)
访问 HelloWorld。在浏览器输入 http://localhost:8080/hello 页面上显示出了我们想要的内容:Hello World !
项目打包运行。
我们使用maven 直接打包,在项目pom所在的目录下,执行 mvn package ,打包 成功后,我们在target目录下能找到 pf-web-0.0.1-SNAPSHOT.jar ,执行 java -jar pf-web-0.0.1-SNAPSHOT.jar。
是不是很简单,不过小朋友就要问了,这是个web项目 ,web容器tomcat呢?
tomcat的问题好解释,springBoot自己集成了tomcat的组件。
SpringBoot项目到底是如何启动的呢?启动流程是什么呢?我们的老朋友main()方法到底做了什么?
解压pf-web-0.0.1-SNAPSHOT.jar,打开META-INF 文件夹,用记事本打开 MANIFEST.MF :
首先,我们分析pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.pw</groupId> <artifactId>pf-web</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>pf-web</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding c0e6 >UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
从dependencies中的内容,我们很容易找到了上一篇中,我们提到的两个组件web 和 thymeleaf。从pom文件的依赖配置中,我们发现全都一样,具有相同的结构,都有前缀“spring-boot-starter”。作为SpringBoot 四大神器之一的 starter,主要用于简化依赖,我们再也不用为依赖的版本和maven地址而发愁,springBoot总会为我们匹配它认为最优秀的版本(虽然有时候可能并不是我们想要的),让依赖的版本见鬼去吧,具有选择恐慌症的伙伴们该乐坏了。另外,我们还可以自己定义一个starter, 这部分内容这里暂时不作介绍。
其次,我们将重点放在 WebApplication.java 这个类上:
package cn.pw.pf.web; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class WebApplication { public static void main(String[] args) { SpringApplication.run(WebApplication.class, args); } }
只有 简简单单的几行代码,一个几乎被我们忘掉 的main方法,没错就是它,main方法。大道至简,回到了我们刚学习开发语言时的第一个代码——main方法,在这里它依旧是项目启动的入口,执行着最原始的使命。
和老革命的寒暄到此结束,我们进入重点,重点关注一下新同志@SpringBootApplication 这个注解:
查看@SpringBootApplication的源码,我们发现它是由@SpringBootConfiguration 、@EnableAutoConfiguration和@ComponentScan由三个注解组合而成。
①@SpringBootConfiguration : 配置类,相当于 xml
②@EnableAutoConfiguration : 启用spring自动装配
③@ComponentScan : 和xml配置自动扫描效果一样,默认扫描当前包和所有子包(所以,启动类一定要放在最外层的包中)。
接下来,我们写一个Controller,来访问我们的Hello World!
就在cn.pw.pf.web下创建一个controller包,在写一个HelloWorldController类。
package cn.pw.pf.web.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Hello World Controller * @Description: * @Author:libin * @Date: Created in 2017/11/9 */ @RestController @RequestMapping("/") public class HelloWorldController { @GetMapping("/hello") public String helloWorld(){ return "Hello World !"; } }
OK,我们HelloWorld!写完了,启动项目。直接在idea中运行WebApplication类的main()方法,注意观察控制台。
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.8.RELEASE) 2017-11-09 23:35:35.779 INFO 25940 --- [ main] cn.pw.pf.web.WebApplication ...//省略中间部分 2017-11-09 23:36:04.967 INFO 25940 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 29 ms
(小知识:SpringBoot启动时的banner 是可以 自定义的哦!有兴趣的可以了解一下,换一个自己喜欢的banner)
访问 HelloWorld。在浏览器输入 http://localhost:8080/hello 页面上显示出了我们想要的内容:Hello World !
项目打包运行。
我们使用maven 直接打包,在项目pom所在的目录下,执行 mvn package ,打包 成功后,我们在target目录下能找到 pf-web-0.0.1-SNAPSHOT.jar ,执行 java -jar pf-web-0.0.1-SNAPSHOT.jar。
是不是很简单,不过小朋友就要问了,这是个web项目 ,web容器tomcat呢?
tomcat的问题好解释,springBoot自己集成了tomcat的组件。
SpringBoot项目到底是如何启动的呢?启动流程是什么呢?我们的老朋友main()方法到底做了什么?
解压pf-web-0.0.1-SNAPSHOT.jar,打开META-INF 文件夹,用记事本打开 MANIFEST.MF :
Manifest-Version: 1.0 Implementation-Title: pf-web Implementation-Version: 0.0.1-SNAPSHOT Archiver-Version: Plexus Archiver Built-By: libin Implementation-Vendor-Id: cn.pw Spring-Boot-Version: 1.5.8.RELEASE Implementation-Vendor: Pivotal Software, Inc. Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: cn.pw.pf.web.WebApplication Spring-Boot-Classes: BOOT-INF/classes/ Spring-Boot-Lib: BOOT-INF/lib/ Created-By: Apache Maven 3.5.0 Build-Jdk: 1.8.0_121 Implementation-URL: http://projects.spring.io/spring-boot/pf-web/[/code]
我们看到 Main-Class: org.springframework.boot.loader.JarLauncher和
Start-Class: cn.pw.pf.web.WebApplication
看来JarLauncher类才是springBoot启动的入口,然后才运行的Start-Class。更加详细的启动原理和过程,我们在后面的高级篇里探讨。
下一章我们讨论SpringBoot 配置文件 application.yml (application.properties)
相关文章推荐
- springboot学习(一)认识springboot及创建第一个springboot项目
- IDEA(1)-创建spring boot 的Hello World 项目
- spring boot demo 学习(一) eclipse下创建第一个spring boot项目
- 我的第一个SpringBoot项目 Component Autowired
- 002_第一个SpringBoot项目
- 【spring Boot】1.创建第一个springBoot项目
- Spring Boot / Spring MVC 入门实践 (一) :环境搭建与第一个项目
- 快速构建可运行的Spring-boot项目(Hello World)
- springboot第一个项目【mybatis】
- Spring Boot系列教程二:创建第一个web工程 hello world
- SpringBoot学习之路:02.第一个程序Hello World及项目结构介绍
- 快速构建可运行的Spring-boot项目(Hello World)
- SpringBoot的第一个web项目
- IDEA创建第一个springboot项目(1)
- SpringBoot(一)——构建第一个SpringBoot项目
- IntelliJ IDEA创建第一个Spring Boot项目
- 快速构建可运行的Spring-boot项目(Hello World)
- springboot第一个项目【创建】
- 快速构建可运行的Spring-boot项目(Hello World)
- 从0搭建第一个Spring Boot项目