概述
好久没写博客了,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 |
@ConditionalOnClass | Classpath里有指定的类 |
@ConditionalOnMissingClass | Classpath里缺少指定的类 |
@ConditionalOnExpression | 给定的Spring Expression Language(SpEL)表达式计算结果为 true |
@ConditionalOnJava | Java的版本匹配特定值或者一个范围值 |
@ConditionalOnJndi | 参数中给定的JNDI位置必须存在一个,如果没有给参数,则要有JNDI InitialContext |
@ConditionalOnProperty | 指定的配置属性要有一个明确的值 |
@ConditionalOnResource | Classpath里有指定的资源 |
@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.
最后
以上就是危机白云为你收集整理的Spring Boot学习笔记-开发第一个应用程序项目结构结构说明发生了什么参考文献的全部内容,希望文章能够帮你解决Spring Boot学习笔记-开发第一个应用程序项目结构结构说明发生了什么参考文献所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复