(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.properties
Spring Boot
配置文件,可以在里面进行一些配置;
(1)Spirng Boot 入门(笔记)的更多相关文章
- spring boot入门笔记(四) - 多环境配置、加载顺序、静态资源映射
1.多环境配置 先描述下以前的开发流程:从SVN把项目下载到本地,各种修改配置文件,启动成功:完成功能后上传到公司的测试服务器,修改各种配置文件,启动成功:最后到上线的日子里,把新功能中涉及到的文件打 ...
- spring boot入门笔记 (三) - banner、热部署、命令行参数
1.一般项目启动的时候,刚开始都有一个<spring>的标志,如何修改呢?在resources下面添加一个banner.txt就行了,springboot会自动给你加载banner.txt ...
- spring boot入门笔记 (一) - 一个简单的说明+一个案例
spring boot 简化开发:把平时开发者最常用的到一些步骤,按照开发者的习惯,把能包装的就包装成一些固有的工具类(就比如我们之前连接数据库时常写的DB工具类).当然,是在原有的spring框架的 ...
- spring boot入门笔记 (二) - application.properties配置文件
项目最重要的一个东西,用来定义整个项目的一些东西(端口.访问项目的名称.数据源.日志.集成mybatis等框架.静态资源目录.thymeleaf.热部署等),很重要很重要的. #整个项目的端口号,默认 ...
- Spring Boot 快速入门笔记
Spirng boot笔记 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...
- SpringBoot入门笔记(一)、HelloWorld
本文是一篇SprintBoot学习入门笔记 1.打开Eclipse,版本为Oxygen 4.7.0 2.新建项目NewProject->MavenProject->Next->Nex ...
- Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用[z]
前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...
- Spring Boot 学习笔记1---初体验之3分钟启动你的Web应用
前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...
- Ruby小白入门笔记之 <Gemfile 文件>
因为初学Ruby,四处查资料无果,才来的贴出亲自试过的操作,覆盖整个个人入门笔记博客中,故所有的操作,都以最明了的方式阐述,当你创建完一个新的Rails应用后,你发现JAVA中我们可以编写maven聚 ...
随机推荐
- 扩展ACL
- Ubuntu 1604 安装配置 kafka,并配置开机自启(systemctl)
安装 kafka 需要先安装 jdk.一.下载官网:http://kafka.apache.org/downloads.html 二.安装 安装参考:https://segmentfault.com/ ...
- 办公室上网慢原因排查 有人下载东西 设置行为管理 宽带分配设置独立下行宽带 TL-WVR1200L
办公室上网慢原因排查 有人下载东西 设置行为管理 宽带分配设置独立下行宽带
- Spring AOP(通知、连接点、切点、切面)
一.AOP术语 通知(Advice) 切面的工作被称为通知.通知定义了切面是什么以及何时使用.除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题.5种通知类型: 前置通知(Before): ...
- spark.sql.shuffle.partitions和spark.default.parallelism的区别
在关于spark任务并行度的设置中,有两个参数我们会经常遇到,spark.sql.shuffle.partitions 和 spark.default.parallelism, 那么这两个参数到底有什 ...
- java-mybaits-014-数据库缓存设计【querycache、mybatis一级缓存、二级缓存】
一.概述 一般来说,可以在5个方面进行缓存的设计: 1.最底层可以配置的是数据库自带的query cache, 2.mybatis的一级缓存,默认情况下都处于开启状态,只能使用自带的Perpetual ...
- 查询数据,从链接地址中爬取文章内容jsoup
查询数据,从链接地址中爬取文章内容 protected void doGet(HttpServletRequest request, HttpServletResponse response) thr ...
- java获取当前路径的方法
1.System.getProperty("user.dir") 函数获取当前路径 // 获取当前路径方式1 System.out.println(System.getProper ...
- 使用 Ninja 代替 make
使用 Ninja 代替 make 摘自:https://www.jianshu.com/p/d118615c1943 22017.01.14 11:41:44字数 1408阅读 26336 前言 在传 ...
- linux记录-安装elk记录(参考博文)
什么是ELK? 通俗来讲,ELK是由Elasticsearch.Logstash.Kibana .filebeat三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK 又 ...