java 基础巩固20

SpringBoot

(1)Spring Boot是一个基于Spring的套件,它帮我们预装了Spring的一系列组件,以便于尽可能少的代码和配置来开发基于Spring的Java应用程序。
(2)以汽车为例,如果我们想组装一辆汽车,我们需要发动机、传动、底盘、外壳、座椅、内饰等各种部件,然后把它们组装起来。Spring就相当于提供了一系列这样的部件,但是要装好汽车上路,还需要我们自己动手。而SpringBoot则相当于已经帮我们装好了一辆可以上路的汽车,如果有特殊的需求,例如把发动机从普通款换成涡轮增压款,可以通过修改配置或编写少量代码完成。
(3)因此,SpringBoot和Spring的关系就是整车和零部件的关系,它们不是取代关系,试图跳过Spring直接学习SpringBoot是不可能的。Spring Boot的目标就是提供一个开箱即用的应用程序架构,我们基于Sping Boot的预置结构继续开发,省时省力。

第一个Spring Boot应用

(1)我们新建一个springboot-hello的工程,创建标准的Maven目录结构如下:
java 基础巩固20_第1张图片
其中,在src/main/resources目录下,注意到几个文件:
(2)application.yml,这是Spring Boot的默认配置文件,它采用YAML格式而不是.properties格式,文件名必须是application.yml而不是其它名称。YAML格式比key=value格式的.properties文件更易读。比较一下两者的写法:
使用.properties格式:
java 基础巩固20_第2张图片
使用YAML格式:
java 基础巩固20_第3张图片
可见,YAML是一种层级格式,它和.properties很容易互相转换,它的优点是去掉了大量重复地前缀,并且更加易读。

使用环境变量

(1)在配置文件中,我们经常使用如下的格式对某个key进行配置:
java 基础巩固20_第4张图片
这种${DB_HOST:localhost}意思是,首先从环境变量查找DB_HOST,如果环境变量定义了,那么使用环境变量的值,否则,使用默认值localhost。这使得我们在开发和部署时更加方便,因为开发时无需设定任何环境变量,直接使用默认值即本地数据库,而实际线上运行时,只需要传入环境变量即可
在这里插入图片描述
(2)logback-spring.xml
这是Spring Boot的logback配置文件名称(也可以使用logback.xml),一个标准的写法如下:
java 基础巩固20_第5张图片
它主要通过映入了Spring Boot的一个缺省配置,这样我们就可以引用类似${CONSOLE_LOG_PATTERN}这样的变量。上述配置定义了一个控制台输出和文件输出,可根据需要修改。
static是静态文件目录,templates是模板文件目录,注意他们不再存放在src/main/webapp下,而是直接放到src/main/resources这个classpath目录,因为在Spring Boot中已经不需要专门的webapp目录了。
(3)我们再来看源码目录结构:
java 基础巩固20_第6张图片
在存放源码的src/main/java目录中,Spring Boot对java包的层级结构有一个要求。注意到我们的根package是com.itranswarp.learnjava,下面还有entity、service、web等子package。Spring Boot要求main()方法所在的启动类必须放到根package下,命名不做要求,这里我们以Application.java命名,它的内容如下:
java 基础巩固20_第7张图片
启动Spring Boot应用程序只需要一行代码加上一个注解@SpringBootApplication,该注解实际上又包含了:
java 基础巩固20_第8张图片
这样一个注解就相当于启动了自动配置和自动扫描。
我们再观察pom.xml,它的内容如下:
java 基础巩固20_第9张图片
使用SpringBoot时,强烈推荐从spring-boot-starter-parent继承,因为这样就可以引入Spring Boot的预置配置。
紧接着,我们引入了依赖spring-boot-starter-web和spring-bbot-starter-jdbc,他们分别引入了Spring MVC相关依赖和Spring JDBC相关依赖,无需指定版本号,因为引入的内部已经制定了,只有我们自己引入的某些第三方jar包需要指定版本号。这里我们引入pebble-spring-boot-starter作为View,以及hsqldb作为嵌入式数据库。hsqldb已经在spring-boot-starter-jdbc中预置了版本号2.5.0,因此此处无需指定版本号。根据pebble-spring-boot-starter的问题当,加入如下配置到application.yml文件:
java 基础巩固20_第10张图片
对Application稍作移动,添加WebMvcConfigurer这个Bean:
java 基础巩固20_第11张图片
现在就可以直接运行Application,启动后观察Spring Boot的日志:
java 基础巩固20_第12张图片
Spring Boot自动启动了嵌入式Tomcat,当看到Started Application in xxx seconds,Spring Boot应用启动成功。现在,我们在浏览器输入localhost:8080就可以直接访问页面了,那么问题来了,前面我们定义的数据源、声明式服务、jdbcTemplate在哪创建的?怎么就可以直接注入到自己编写的UserService中呢?
这些自动创建的Bean就是Spring Boot的特色:AutpConfiguration。
当我们引入spring-boot-starter-jdbc时,启动时会自动扫描所有的XxxAutoConfiguration:
在这里插入图片描述
因此,我们自动得到了一个DataSource、一个DataSourceTransactionManager和一个JdbcTemplate。

可见,Spring Boot自动装配功能时通过自动扫描+条件装配实现的,这一套机制在默认情况下工作的很好,但是,如果我们要手动控制某个Bran的创建,就需要详细的了解Spring Boot自动创建的原理,很多时候还要跟踪XxxAutoConfiguration,以便于设定条件使得某个Bean不会被自动创建。

你可能感兴趣的:(java,spring,boot,spring)