springboot 基础学习1

SpringBoot 开始学习

基础部分--自动配置原理

1.<!-- 继承父包 :版本仲裁-->

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.1.2.RELEASE</version>

        <relativePath></relativePath>

    </parent>

2.spring-boot-starter: springboot  场景启动器

  Springboot将所有功能场景抽取出来,做成了一个个的starter(启动器)

  要用什么功能就导入相应的场景启动器

  spring-boot-starter-xxx是官方提供的starter,xxx-spring-boot-starter是第三方提供的starter

3.SpringBoot在启动时从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值

将这些值作为自动配置类导入到容器,自动配置类就生效,帮我们进行自动配置工作。

以前需要自己配置的东西,自动配置类

@Import({Registrar.class})  //实现包扫描导入组件

@Import({EnableAutoConfigurationImportSelector.class}) //实现导入自动配置类

自动配置类在spring-boot-starter-autoconfigure的jar包中,也可以自己写自动配置类

自动配置类必须在一定条件下生效

配置文件做如下配置:

debug=true

打印自动配置报告,这样就可以知道自动配置类生效

4.配置文件的加载路径及设置

application.properties或者application.yml可以修改默认的配置

    SpringBoot默认加入很多的自动配置类组件,

    其中这些组件的属性有的给了默认值,有的可以通过配置文件注入属性

    理解pom.xml中 spring-boot-configuration-processor的作用《配置文件处理器》


  我们在主配置文件编写的时候,文件名可以是 【application-{profile}.properties/yml】

  application-dev.properties

//指定不同环境下使用哪个配置文件

spring.profiles.active=dev

  加载配置文件的位置及顺序

file:./config/

file./

classpath:/config/

classpath:/

  【优先级从高到低顺序,高优先级会覆盖低优先级的相同配置;互补配置(所有配置文件都会加载)】

  也可以指定配置文件位置

server.servlet.context-path=/boot03

  引入外部配置规则! 



5.yaml的基本语法(配置文件的写法)

字面量,对象and Map, 集合and数组 的表示规则

########################################################################################################

6.配置文件值注入  (配置文件参数--》XXXProperties类对象)

  @ConfigurationProperties(prefix="") 注解 Vs @Value("${}")

  使用场景分析

如果说,我们只是在某个业务逻辑中获取一下配置文件的某一项值,使用@Value;

如果专门编写了一个javaBean和配置文件进行映射,我们直接使用@ConfigurationProperties

  解读:@Value 可以直接从配置文件中获取值并将该值注入给使用了该注解的属性---属性级别(不可复杂类型)

    获取配置文件中的值注入到该类的bean中

@ConfigurationProperties->读取配置文件转换为bean  :将配置文件中的数据封装到bean中

eg: 

@ConfigurationProperties(locations = "classpath:mail.properties", ignoreUnknownFields = false, prefix = "mail")

ConfigurationPropertiesBindingPostProcessor会对标注@ConfigurationProperties注解的Bean进行属性值的配置

如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,

那么在IOC容器中是获取不到properties 配置文件转化的bean。

说白了 @EnableConfigurationProperties 相当于把使用  @ConfigurationProperties 的类进行了一次【注入】。

使用@Component或@EnableConfigurationProperties对于@ConfigurationProperties的效果是一样的!!!!

总结:

@EnableConfigurationProperties会向容器中注入ConfigurationPropertiesBindingPostProcessor

该处理器会对标注了@ConfigurationProperties注解的Bean进行属性值的配置并注入到容器

  官方方式:(向bean中注入属性,先将全局配置文件中属性注入到特定bean中,将该bean注入到自动配置类,即可在方法调用时使用该bean中的属性,

即完成了从配置文件到组件的过程:此过程中可以通过Conditional来加各种条件)

自动配置类中配置某个对象所需的参数都封装在配置类的某个XXXproperties中,

通过在自动配置类上加@EnableConfigurationProperties(XXXproperties.class)

及在XXXproperties类上加@ConfigurationProperties(...) ,将配置文件中的属性值加入到对应的参数封装类里

自动配置类的构造器会自动从容器中找到该XXXproperties,注入到自动配置类

在后续的@Bean中就可以使用其中的参数构造组件加入容器

所有在配置文件中能配置的属性都是在xxxProperties类中封装着

【一旦这个配置类生效;这个配置类会给容器添加各种组件;这些组件的属性是从对应的properties中获取的,这些

类里面的每个属性又是和配置文件绑定的】

@Conditional

必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效

##############################################################################################################

7.Spring Boot中最重要的两个优势就是可以使用starter简化依赖配置和Spring的自动配置

8.自动配置永远是第二位的,一旦你配置自己的东西,那自动配置的就会被覆盖

9.springboot 内嵌tomcat及配置和优化 tomcat

10. WebMvcConfigurer  手动配置MVC相关的组件,实现该接口

容器中所有的WebMvcConfigurer都会一起起作用,我们的配置类也会被调用

配置类中添加@EnableWebMvc即可,所有的SpringMVC的自动配置都失效了

11.Spring Boot有四大神器,分别是auto-configuration、starters、cli、actuator

    actuator是spring boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看、相关功能统计等

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

12.SpringBoot源码分析之环境和配置文件的加载

EnvironmentPostProcessor在Spring容器构造之前调用,在读取完yml配置文件之后得到环境信息之后的处理器

13 BeanDefinition的加载、解析、处理、注册主要涉及到了四个类。

①、XMLBeanDefinitionReader:主要是的任务是把XML文件加载到内存中以Document对象的形式存在。

②、DefaultBeanDefinitionDocumentReader:完成解析和处理的任务。最后将处理得到的BeanDefinitionHolder交给了BeanDefinitionReaderUtils进行注册。

③、BeanDefinitionReaderUtils:BeanDefinitionHolder有了,Bean工厂也有了,它就负责把BeanDefinitionHolder中的BeanDefinition和BeanName等取出来,然后注册到Bean工厂中。

④、DefaultListableBeanFactory(bean工厂):它有一个ConcurrentHashMap成员变量,以beanName为键,BeanDefinition为值保存注册的bean。

SpringBoot日志框架

springboot默认使用slf4j+logback

并且添加了很多桥接器,使得其他模块不同日志框架最后都整合到slf4j

如果要引入其他框架?

一定要把这个框架的日志实现的依赖移除掉,添加对应门面的桥接器

不推荐修改日志实现

springboot 可在配置文件中修改日志相关配置

logging.level.com.wdjr=trace

#不指定path就是当前目录下生成springboot.log

#logging.file=springboot.log

#当前磁盘下根路径创建spring文件中log文件夹,使用spring.log作为默认

logging.path=/spring/log

#控制台输出的日志格式 日期 + 线程号 + 靠左 级别 +全类名50字符限制+消息+换行

logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

#指定文件中日志输出的格式

logging.pattern.file=xx

更推荐使用

logback-spring.xml 完全配置形式,并且由springboot

web开发

1.静态资源路径

"classpath:/META-INF/resources/",

"classpath:/resources/",

"classpath:/static/",

"classpath:/public/",

"/";当前项目的根路径

在WebMvcConfigurer接口中有

void addResourceHandlers(ResourceHandlerRegistry registry):用于添加静态资源文件映射规则

2.模板引擎

将html和数据 结合到一起 输出组装处理好的新文件

SpringBoot推荐Thymeleaf;语法简单,功能强大

    只要把HTML页面放到classpath:/templates/,thymeleaf就能自动渲染

MVC

1.springboot默认配置了哪些MVC组件

以下是SpringBoot对SpringMVC的默认

Spring Boot provides auto-configuration for Spring MVC that works well with most applications.

The auto-configuration adds the following features on top of Spring’s defaults:

Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.

自动配置了ViewResolver(视图解析器:根据方法的返回值得到视图对象(View),视图对象决定如何渲染(转发?重定向?))

ContentNegotiatingViewResolver 组合所有视图解析器

如何定制:我们可以自己给容器中添加一个视图解析器;自动将其整合进来

Support for serving static resources, including support for WebJars (see below).静态资源

Static index.html support.

Custom Favicon support (see below).

自动注册 了Converter , GenericConverter , Formatter beans.

Converter :类型转换 文本转为字面量

Formatter :格式化器 转换后格式转换

Support for HttpMessageConverters (see below).

HttpMessageConverters :转换HTTP转换和响应:User - json

Automatic registration of MessageCodesResolver (see below).

定义错误代码生成规则

Automatic use of a ConfigurableWebBindingInitializer bean

2.如何自定义MVC组件加入

WebMvcConfigurer接口 

用于手动配置MVC相关的组件,实现该接口

容器中所有的WebMvcConfigurer都会同默认配置一起起作用

3.不适用springboot默认配置,完全自定义MVC组件

@EnableWebMvc

在实现了WebMvcConfigurer接口配置类上添加该注解,所有的SpringMVC的自动配置都失效了

4.异常处理

/**

* 异常处理器

*/

@ControllerAdvice

public class MyExceptionHandler {

@ExceptionHandler(XxxException.class)

public String handlerException(Exception e, HttpServletRequest request){

Map<String ,Object> map =new HashMap<>();

//传入自己的状态码

request.setAttribute("javax.servlet.error.status_code", 432);

map.put("code", "user not exist");

map.put("message", e.getMessage());

//转发到error

return "forward:/error";

}

ServletContainer

1. #通用的servlet容器配置

server.xxx

#tomcat的配置

server.tomcat.xxxx

2. 编写一个EmbeddedServletContainerCustomizer;嵌入式的Servlet容器的定制器;来修改Servlet的容器配置

3. 切换容器 仅仅需要修改pom文件的依赖就可以(只需exclusion tomcat,再添加其他容器如jetty)

4.可以使用springboot 切换外置服务器容器

SpringBoot帮助我们自动配置SpringMVC的时候,自动注册SpringMVC的前端控制器;DispatcherServlet;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容