Spring Boot是一个快速开发框架,快速的将一些常用的第三方依赖整合(通过Maven子父亲工程的方式),简化xml配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat),最终以Java应用程序进行执行。
简化spring
应用开发,约定大于配置
springboot
是微服务开发的基础架构。
(1)快速搭建开发框架。
(2)开箱即用:提供了各种默认的配置。约定大于配置。
(3)内嵌tomcat容器,直接使用jdk运行项目(jar包)。
java -jar jar包名称
(4)没有冗余代码生成,无需xml配置。
(5)开发简单,提高开发效率。
@SpringBootApplication
@ComponentScan
@SpringbootTest
@ImportAutoConfiguration
@SpringBootConfiguration
@ImportResource
@PropertySource
@PropertySource
@Lazy
只要使用了
@EnableAutoConfiguration
注解就能实现自动配置
Spring Boot在进行SpringApplication对象实例化时会加载META-INF/spring.factories文件,将该配置文件中的配置载入到Spring容器。
1、通过@EnableAutoConfiguration找到spring.factories文件
2、加载自动配置类XXXAutoConfiguration
3、通过自动配置类加载对应的配置信息
4、实例化bean
启动流程:
1、创建springbootapplication对象,完成初始化
(1)加载资源文件
(2)初始化构造器
(3)初始化监听器
(4)指定启动类(读取注解)
2、执行run方法
(1)打印banner
(2)启动监听器
(3)创建上下文
(4)加载配置信息
(5)刷新上下文
3、创建bean工厂,实例化所有bean
启动器
Starters
包含了一系列可以集成到应用里面的依赖包,可以一站式集成spring
技术而不需要另找依赖包。
1、
spring-boot-starter-web
(嵌入tomcat和web开发需要servlet与jsp支持)
2、spring-boot-starter-data-jpa
(数据库支持)
3、spring-boot-starter-data-redis
(redis数据库支持)
4、spring-boot-starter-solr
(solr搜索应用框架支持)
5、mybatis-spring-boot-starter
(第三方的mybatis集成starter)
如果在不同的目录中存在多个配置文件,它的读取顺序是:
1、config/application.properties(项目根目录中config目录下)
2、config/application.yml
3、application.properties(项目根目录下)
4、application.yml
5、resources/config/application.properties(项目resources目录中config目录下)
6、resources/config/application.yml
7、resources/application.properties(项目的resources目录下)
8、resources/application.yml
提供多套配置文件,如:
applcation.properties
application-dev.properties
application-test.properties
application-prod.properties
然后再application.properties
文件中指定环境,如:
spring.profiles.active=test
模板引擎:页面模板和数据的分离。
1、freemarker
2、velocity
3、thymeleaf
整合swagger
在线接口文档
在启动类上加:@EnableOpenApi
也可以加在swagger
配置类上。
@Api
加在controller类前。描述类的作用。
@ApiOperation
加在controller中的方法前。描述方法的作用。
@ApiImplicitParams
加在controller中的方法前。描述方法的参数(请求参数)。
@ApiResponses
加在controller中的方法前。描述方法的返回值(响应json数据)。
@ApiModel
加在实体类前,用于描述实体类的作用。
@ApiModelProperty
加在实体类的属性前,用于描述实体类的属性。
命名规范:
java属性名必须以两个及以上的小写字母开头!!!!
这意味着,数据库列名如果有多个单词构成,第一个单词必须有两个及以上的字母!!!!!
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
public String test1(@Valid User user){
return "vali ok";
}
@NotNull
private String uuName;
Spring JavaConfig 是Spring 社区的产品, 它提供了配置Spring IoC 容器的纯Java 方法。因此它有助于避免使用XML 配置。使用JavaConfig 的优点在于:
1、面向对象的配置。由于配置被定义为JavaConfig 中的类,因此用户可以充分利用Java 中的面向对象功能。一个配置类可以继承另一个, 重写它的@Bean方法等。
2、减少或消除XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在XML 和Java 之间来回切换。JavaConfig 为开发人员提供了一种纯Java 方法来配置与XML 配置概念相似的Spring 容器。从技术角度来讲,只使用JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与XML 混合匹配是理想的。
3、类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置Spring容器。由于Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索bean,不需要任何强制转换或基于字符串的查找。
spring-boot有三种配置文件的方式:properties、yaml、yml。spring-boot会自动加载properties、yaml和yml配置文件(yaml和yml是同一种格式,只是后缀名不一样)。当这三种配置文件同时存在时,加载顺序为:properties > yaml > yml 。当三种配置文件中的配置信息有冲突时,properties配置文件会覆盖后两种配置文件中的配置信息。
1、
Spring
Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。
2、SpringMVC
SpringMVC提供了一种分离式的方法来开发Web应用。通过DispathcherServlet
,MoudlAndView
和ViewResolver
等组件进行开发。
3、Springboot
Spring
和SpringMVC
的问题在于需要配置大量的参数
Springboot
是一个微服务框架通过自动配置和启动器来解决这个问题。
加载目录优先级:
classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/
webapp
自定义目录:
srping:
mvc:static-path-pattern:/image/(**无括号)
resource:
static-locations:classpath:/images/
主要是通过maven
插件进行打包,将所有的项目依赖包都进行打包压缩,最终整个webServer项目生成一个jar文件包。
然后调用 java -jar xxxx-springboot.jar
进行运行,就完成了整个的项目运行了。
观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系(注册),使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新(通知)。说白了就是个注册,通知的过程。
观察者模式的主要角色如下:
- 抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。
- 具体主题(Concrete Subject)角色:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。继承Subject类,在这里实现具体业务,在具体项目中,该类会有很多变种。
- 抽象观察者(Observer)角色:它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。
- 具体观察者(Concrete Observer)角色:实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。
观察者模式是一种对象行为型模式,其主要优点如下:
它的主要缺点如下: