Spring Boot学习笔记-开发第一个应用程序

好久没写博客了,2017列个书单,刚好《Spring Boot 实践》的程序就是一个书单。

项目结构

这里写图片描述

结构说明

这是一个典型的maven项目的布局
应用程序代码位于src/main/java目录里,
资源都在src/main/resources目录里,
测试代码在src/test/java目录里

其他文件说明

pom.xml Maven构建说明文件
DemoApplication.java 应用程序的启动引导类,也是主要的spring配置类
application.properties 用于配置应用程序和Spring Boot的属性
DemoApplicationTests.java 一个基本的集成测试类

DemoApplication在Spring Boot应用程序里有两个作用:配置和启动引导。首先,这是主要的Spring配置类。虽然Spring Boot的自动配置免除了很多Spring配置,但你还需要进行少量配置来启用自动配置。

这里写图片描述

@SpringBootApplication 将三个有用的注解组合在了一起

Spring的 @Configuration :标明该类使用Spring基于Java的配置。
Spring的 @ComponentScan :启用组件扫描,这样你写的Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。
Spring Boot 的 @EnableAutoConfiguration : 这 个 不 起 眼 的小注解也可以称为@Abracadabra,就是这一行配置开启了Spring Boot自动配置的魔力,让你不用再写成篇的配置了。

运行DemoApplication.java

这里写图片描述

在8080端口就能看到如下界面

这里写图片描述

因为我们还没写控制器类,所以是404

往application.properties中添加一条

server.port=8000

嵌入式Tomcat的监听端口就变成了8000,而不是默认的8080

你完全不用告诉Spring Boot为你加载 application.properties ,只要它存在就会被加载,Spring和应用程序代码都能获取其中的属性

第二章的程序跑起来如下

这里写图片描述

学习示例已分享到github

github地址

发生了什么

配置是Spring Framework的核心元素,必须要有东西告诉Spring如何运行应用程序。

在向应用程序加入Spring Boot时,有个名为spring-boot-autoconfigure的JAR文件,其中包含了很多配置类。每个配置类都在应用程序的Classpath里,都有机会为应用程序的配置添砖加瓦。这些配置类里有用于Thymeleaf的配置,有用于Spring Data JPA的配置,有用于Spiring MVC的配置,还有很多其他东西的配置,我们可以自己选择是否在Spring应用程序里使用它们。

所有这些配置如此与众不同,原因在于它们利用了Spring的条件化配置,条件化配置允许配置存在于应用程序中,但在满足某些特定条件之前都忽略这个配置。

Spring Boot运用条件化配置的方法是,定义多个特殊的条件化注解,并将它们用到配置类上。下表是Spring Boot提供的条件化注解。

条件化注解配置生效条件
@ConditionalOnBean配置了某个特定Bean
@ConditionalOnMissingBean没有配置特定的Bean
@ConditionalOnClassClasspath里有指定的类
@ConditionalOnMissingClassClasspath里缺少指定的类
@ConditionalOnExpression给定的Spring Expression Language(SpEL)表达式计算结果为 true
@ConditionalOnJavaJava的版本匹配特定值或者一个范围值
@ConditionalOnJndi参数中给定的JNDI位置必须存在一个,如果没有给参数,则要有JNDI InitialContext
@ConditionalOnProperty指定的配置属性要有一个明确的值
@ConditionalOnResourceClasspath里有指定的资源
@ConditionalOnWebApplication这是一个Web应用程序
@ConditionalOnNotWebApplication这不是一个Web应用程序
因为Classpath里有H2,所以会创建一个嵌入式的H2数据库Bean,它的类型是javax.sql.DataSource ,JPA实现(Hibernate)需要它来访问数据库。

因为Classpath里有Hibernate(Spring Data JPA传递引入的)的实体管理器,所以自动配置会配置与 Hibernate相关的 Bean,包括 Spring的 LocalContainerEntityManager-FactoryBean 和 JpaVendorAdapter。

因为Classpath里有Spring Data JPA,所以它会自动配置为根据仓库的接口创建仓库实现。

因为Classpath里有Thymeleaf,所以Thymeleaf会配置为Spring MVC的视图,包括一个Thymeleaf的模板解析器、模板引擎及视图解析器。视图解析器会解析相对于Classpath根目录的/templates目录里的模板。

因为Classpath里有Spring MVC(归功于Web起步依赖),所以会配置Spring的DispatcherServlet并启用Spring MVC。

因为这是一个Spring MVC Web应用程序,所以会注册一个资源处理器,把相对于Classpath根目录的/static目录里的静态内容提供出来。(这个资源处理器还能处理/public、/resources和/META-INF/resources的静态内容。)

因为Classpath里有Tomcat (通过Web起步依赖传递引用),所以会启动一个嵌入式的Tomcat容器,监听8080端口。

Spring Boot自动配置承担起了配置Spring的重任,因此我们能专注于编写自己的应用程序

参考文献

Walls C. Spring Boot in Action[J]. 2016.

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页