(1)Spirng Boot 入门(笔记)
简介
Spring Boot 帮助我们简化 Spring 应用开发;
以前,我们创建一个 Spring 项目的时候,需要导入 Spring 的一些列包,现在只需要一个 Spring Boot 的启动器,就好了;

就跟这样图一样,以前我们面对是整个 Spring ,现在有个 Spring Boot 挡在前面,大部分时候,我们只需要面对那一个点 ,配置一点点,甚至零配置;
但是 Spring Boot 的目标,不仅仅简化一个 Spring ,它可以和各种框架集成,最终的目标是变为 J2EE 的一站式解决方案 ,Spring Boot 全家桶时代;
一个极好的比喻,以前学的框架,比如 Mybatis ,你把他认为是 孙悟空,能干啥啥,SpringMvc 是 唐僧 ,能干啥啥,那么 Spring Boot 就是一部西游记 ,包罗万象;
优点
- 快速创建对立运行的
Spring项目以及主流框架集成; - 内置了
Serclet容器,应用不需要打包成War包,打成jar包,这样服务器上,无须再安装Tomcat这样的容器,直接使用java运行打包好的jar; - 使用官方的启动器(starters),可以快速的导入依赖和版本控制
- 大量的自动配置,约定好的,默认的配置,也可以修改默认配置
- 不再需要
xml文件了,这个不需要是真的不需要,不是那种xml代码自动生成
Hello World
不需要再像之前那样,使用 Maven 创建项目,直接使用 IDEA 的 Spring Initializr 创建项目;
-
选择项目创建方式

-
填写项目的基本属性
项目/模块名字,不能含义数字,更正下,懒得再重新截图、打字;

-
选择我们需要的组件
这里我仅仅需要Web环境,我们选中的,IDEA 都会联网去下载。

-
项目保存路径

-
构建完成

此时访问 localhost:8080
会看到一个白板错误页面(Spring Boot 的默认错误页面),表示一个 Spring Boot 项目已将创建完成,并且跑起来了;
至于为啥不是一个欢迎页面,而是一个错误页面,原因是默认没配置欢迎页面;
此时,还可以创建一个 处理器 ,处理器的地方,不能随意放,必须保证与上面默认生成的类在一个包下面,或者在其所在包的子包下面;

然后访问 localhost:8080/hello 即可看到 hello world;
打包成可执行 jar
通过上面创建项目,pom 文件里面,默认已经加入了打包成可执行 jar 的依赖:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
通过 Maven 打包,然后使用 java 命令 java -jar xxxxx.jar 也可运行项目,不需要我们有 tomcat ;
这样我们的服务器,只需要有 java 环境即可,不需要安装 Tomcat;
细节探究
上面的项目可以跑起来,而其还可以处理请求;
我们都没有进行任何配置,最基本的 组件扫描,扫描 bean ,都没有,那么是怎么运行的呢 ?
-
父项目
打开
pom文件:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>这个父项目,还有一个自己的父项目
spring-boot-dependencies,它管理Spring Boot项目应用中所有的依赖的版本,它为所有的可能用到的依赖,都设置了一个默认的版本,是Spring Boot的版本依赖仲裁中心;使用
Spring Boot,我们导入依赖,默认是不需要写版本的,Spring Boot的版本仲裁中心会默认的进行管理,如果仲裁中心没有,则需要我们自己手动添加依赖版本号; -
启动器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>spring-boot-starter-web分成spring-boot-starte和Web两部分看;spring-boot-starter是Spring boot的场景启动器,也就是上面的第三步列举出来的那么多的组件,后面的Web是场景;这里,我们选择了
spring-boot-starter-web,它就帮我们导入了Web应用需要的相关依赖,比如Tomcat就在这里面;Spring Boot还有许多相关的启动器,基本上将所有的场景都抽取为启动器了,需要使用什么场景,就导入相关的启动器;
主程序类,主入口类上面的注解
-
@SpringBootApplication@SpringBootApplication来标注一个主程序类,说明这是一个Spring Boot应用 ,Spring Boot应该运行这个类的main方法,以启动Spring Boot应用;@SpringBootApplication注解上面的标注:@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication {除去那几个元注解,还有几个注解,需要我们看下;
-
@SpringBootConfiguration标注在某个类上,用于告诉
Spring Boot,这是一个配置类;配置类,是用来替换掉配置文件的,以前写配置文件,现在写配置类;
代码如下:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }可以发现其上面有个
@Configuration注解,而@Configuration注解,就是Spring的配置类,这里@Configuration和@SpringBootConfiguration其实一样;对了,
@Configuration其实也是容器中的一个组件,在其源代码上可以看到有@Component注解 ;@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Configuration { @AliasFor( annotation = Component.class ) String value() default ""; } -
@EnableAutoConfiguration开启自动配置功能, 比如之前的疑问,项目跑起来了,基本的包扫描,我们没有进行配置,其实是
Spring Boot帮我们进行了自动配置,也就是这个注解的功能;@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration {上面有个
@AutoConfigurationPackage注解,自动配置包:@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Import({Registrar.class}) public @interface AutoConfigurationPackage { }上面有个
@Import({Registrar.class})注解,负责给容器导入组件,具体导入什么,由Registrar.class决定;它将导入该注解所在的包,以及其子包下面的组件导入容器中,由于
@AutoConfigurationPackage注解上面标注了@Import({Registrar.class})注解,而@AutoConfigurationPackage又是标注在@EnableAutoConfiguration注解上,最后@EnableAutoConfiguration标注在@SpringBootApplication上,所以也就是,@SpringBootApplication注解会扫描其所在包及其子包下面的组件,添加到容器中;@EnableAutoConfiguration上面还有一个@Import({AutoConfigurationImportSelector.class})注解,其功能是自动配置选择器,也就是我们选择了启动器对应的场景,这个注解,就会把对应的场景需要的配置,都添加到容器中;
自动生成的项目结构分析
resource 文件夹目录
static保存所有的静态资源:js,css,image等等templates保存所有的模板页面,Spring Boot默认使用jar包的嵌入式Tomcat,不支持JSP,可以使用模板引擎freemarker,thymeleaf;application.propertiesSpring Boot配置文件,可以在里面进行一些配置;

浙公网安备 33010602011771号