当前位置: 首页 > >

SpringBoot2 企业应用实战(1)

发布时间:

SpringBoot 使用的是 2.1.3.RELEASE


第一章 SpringBoot入门


1.Spring框架的组成结构图



当使用Spring框架时,必须使用Spring Core Container(核心容器),它代表了Spring框架的核心机制,Spring Core Container 主要由 org.springframework.core、org.springframework.beans、org.springframework.context 和?org.springframework.expression 四个子包组成,主要提供Spring IoC 容器支持。


2.Spring 框架非常优秀,但是最大问题是“配置过多”。SpringBoot 的出现就是为了解决 Spring 框架存在的问题。Spring Boot的理念:约定优先于配置(COC,Convention Over? Configuration)。SpringBoot 优点:编码简单:推荐使用注解;配置简单:自动配置、快速构建项目、快速集成新技术的能力;部署简单:内嵌Tomcat、Jetty等 Web 容器;监控简单:自带项目监控。


3.SpringBoot 的主要特性


1)SpringBoot 是伴随着 Spring4.0 诞生的,继承了 Spring 框架原有的优秀基因;


2)遵循“约定优先于配置”的原则,使用SpringBoot只需要很少的配置,大部分的时候,直接使用默认的配置即可;


3)对主流开发框架无配置集成,自动整合第三方框架;


4)可独立运行 Spring 项目,SpringBoot 可以以 jar 包的形式独立运行。使用 java -jar 命令或者在项目的主程序中执行 main 函数就可以成功运行项目;


5)内嵌 Servlet 容器,可以选择内嵌 Tomcat、Jetty等 Web 容器,无须以 war 包形式部署项目;


6)提供 starter 简化 Maven 配置,基本上可以做到自动化配置,高度封装,开箱即用;


7)SpringBoot 会根据项目依赖来自动配置 Spring 框架,极大减少了项目所使用的配置;


8)SpringBoot 提供了准生产环境的应用监控;


9)无代码生成和 XML 配置,纯 Java 的配置方式,很简单,很方便。


10)分布式开发,与 SpringCloud 的微服务无缝结合。


4.SpringBoot2.0 的重要改变


1)基于 Spring5 构建,Spring5 的新特性都可以在 SpringBoot2.0 中使用;


2)为各种组件的响应式编程提供了简化配置,如: Reactive Spring Data、Reactive Spring Security等;


3)要求 Java 版本必须是 Java8 或者更高版本,支持Java9;


4)要求 Gradle4或更高版本,Maven3.2 或更高版本


5)要求Tomcat8 或者更高版本, Hibernate5.2 或更高版本, Thymeleaf3 或更高版本。


5.所有的 spring-boot-starter 模块都有约定的默认配置,但是允许开发者调整这些默认的配置用以改变默认的配置行为,这就是所谓的“约定优先于配置”。SpringBoot 的配置按优先级从高到低,主要可以分为:


1)命令行参数


2)系统环境变量


3)位于文件系统中的配置文件


4)位于classpath中的配置文件


5)固化到代码中的配置


高优先级的配置项会覆盖或者优先生效。


6.常用约定


1)项目结构层面的约定


在传统的Java Web 项目中,所有的静态文件和页面都放在 WebContent 目录下,而 Spring Boot 项目的静态文件和页面文件统一放在 src/main/resources 目录对应的子目录下。 src/main/resources/static 目录用于存放各类静态资源文件,比如 css、js 和 image 等; src/main/resources/templates 目录用于存放页面模板文件,比如html和jsp等。


2)SpringMVC框架层面的约定


spring-boot-starter-web 依赖模块默认自动配置一些 SpringMVC 必要的组件。


将 ViewResolver 自动注册到 Spring 容器;将 Converter 和 Formatter 等 bean 自动注册到 Spring 容器;将对 Web 请求的支持和相应的类型转换的 HttpMessageConverter 自动注册到 Spring 容器;将 MessageCodesResolver 自动注册到 Spring 容器。


3)嵌入式 Web 容器层面的约定


spring-boot-starter-web 依赖模块默认使用嵌入式 Tomcat 作为 Web 容器对外提供服务,默认使用 8080 端口对外监听和提供服务。


7.SpringBoot的Maven项目结构



1)Source Folder 不是一个简单的 src,而是 src/main/java,因为 Maven 是一种强约束的工程类型。它对工程的文件命名和格式要求比较严格。其好处是指定了规范,方便代码的移植和理解。而 src/main/java其实是一个路径。


src/main/java:这个目录下存储主要的 Java 代码。


src/test/java:存储测试用的类,比如JUnit的测试一般就存放在这个目录下面。


2)target 文件夹是源码编译后生成的 class 文件存放的地方(如果是一个web应用,还有其他的信息也在编译打包之后放在target里面)。target文件夹下有两个目录。


classes:存放项目代码编译后生成的 class 文件;


test-classes:存放测试代码编译后生成的 class 文件


8.@RestController 注解是一个组合注解,相当于 SpringMVC 中的 @Controller + @ResponseBody 合在一起的作用。


@SpringBootApplication 注解也是一个组合注解,相当于 @Configuration + @EnableAutoConfiguration + @ComponentScan


?


第二章 SpringBoot 核心


1.SpringBoot 启动类与核心注解 @SpringBootApplication


SpringBoot 的项目一般都会有注解 *Application 标注的入口类,入口类中会有一个 main 方法,main 方法是一个标准的 Java 应用程序的入口方法,可以直接启动。@SpringBootApplication 注解是 SpringBoot 的核心注解,用此注解标注的入口类是应用的启动类,通常会在启动类的 main 方法中通过 SpringApplication.run(App.class,args) 来启动 SpringBoot 应用项目。


@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 { ...... }

@SpringBootApplication 注解组合了 @SpringBootConfiguration 、 @EnableAutoConfiguration 和 @ComponentScan


@SpringBootConfiguration:SpringBoot 项目的配置注解,也是一个组合注解;


@EnableAutoConfiguration:启动自配置,该注解让 SpringBoot 根据当前项目所依赖的 jar 包自动配置项目的相关配置项;


@ComponentScan:扫描配置,SpringBoot 默认会扫描 @SpringBootApplication 所在的同级包以及它的子包,所以建议将 @SpringBootApplication 修饰的入口类放置在项目包下(GroupId + ArtifactId),这样做的好处是,可以保证 SpringBoot 项目自动扫描到项目的所有包。


2.关闭某个自动配置


例如,不想自动配置 Redis,想自己手动配置,通过查看 @SpringBootApplication 的源码可以看出,关闭特定的自动配置应该使用 @SpringBootApplication 下的 exclude 参数,现以关闭 Redis 自动配置为例:


@SpringBootApplication(exclude={RedisAutoConfiguration.class})

3.应用的全局配置文件


可在SpringBoot项目的 src/main/resources 目录下或者类路径的 /config 目录下创建一个全局配置文件 application.properties 或者是后缀为 .yml 的 application.yml 文件,用于修改 SpringBoot 项目的默认配置值。通常我们*惯使用 application.properties 文件作为应用的全局配置文件,一般放到 src/main/resources 目录下。


详细的配置请参考官网:https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/#common-application-properties


4.SpringBoot 自动配置原理


5.spring.factories 分析


6.SpringBootWeb 开发的自动配置



友情链接: 高中资料网 职业教育网 成人教育网 理学 大学工学资料