SpringBoot系列(一)

SpringBoot简述

一. 什么是SpringBoot?


springboot是一个基于spring所有功能的工具框架,能够让一个spring框架的开发过程简化再简化,能应对非常多的开发场景,实现自动配置。例如最长涉及的web应用,springboot帮住完成了web容器的配置,springmvc,spring的配置

二. Springboot的特点


  1. 独立运行spring容器

    spring容器的运行一般都需要别的容器的支持,比如开发一个web应用,要由第三方web容器支持。而springboot可以独立运行,在main方法中直接加载springboot 运行代码。

  2. 内嵌servlet

    springboot为web工程提供了内嵌的web容器,默认使用tomcat,可以修改成jetty和undertow,并且按照习惯进行默认配置,例如端口号8080 项目访问路径 /.结合第一个特点,web工程就可以不用封装war包访问外部的web容器运行,直接使用jar包运行。

  3. 简化依赖

    springboot能够实现它的独有的特点,是因为它在spring基础之上扩展了非常庞大的代码.导致要想使用springboot必须依赖大量的资源.这样极其不方便的。所以springboot为开发者准备了丰富环境的简化依赖。例如:我们要开发一个web应用(spring-context,spring-webmvc,jackson,loggings等等),在springboot只要想开发一个web应用,只需要依赖一个spring-boot-starter-web,实现依赖的传递。

  4. 自动配置

    springboot最核心的特点,就是自动配置。它为大多数开发场景准备对应的配置逻辑.在使用springboot开发时,可以不考虑如何配置这些技术,环境,只需要按照springboot提供的逻辑准备你的技术,环境。

    例如:自动完成web容器的配置。简化了端口,程序访问根目录,静态资源访问前后缀拼接等等配置内容。自动完成了datasource数据源配置,你一旦需要持久层数据源连接数据库,只需要提供对应属性就可以了。

三. SpringBoot核心注解


springboot工程中总是在添加一个核心注解@SpringBootApplication,它是一个springboot框架提供的组合注解,一共组合了3个注解:

  1. SpringBootConfiguration

    本质上,这个注解就是一个spring的配置注解@Configuration。继承自@Configuration(一个配置注解所在的类,相当于与一个xml配置文件的功能)

  2. ComponentScan

    相当于一个xml配置文件中的<context:component-scan>标签,默认将当前类所在的包作为basePackage使用。

    上述两个注解同时存在,相当于使用了一个xml配置文件。

    <beans>
    	<context:component-scan basePackage="org.example"/>
    </beans>
    
    

    两个注解一组合,能让我们在代码中自定义的各种 @Component @Controller @Service注解所在类生成在IOC容器。

  3. EnableAutoConfiguration

    每一个版本的springboot都会扩展非常庞大的**AutoConfiguration的配置类,每一个类都相当于是一个xml.@EnableAutoConfiguration的作用就是导入这些配置类,使得在加载一个springboot启动类时,不仅具备扫描自定义业务层注解的功能,还具备加载springboot自动配置逻辑。

    springboot当前版本都准备了哪些自动配置类,可以从一个spring.factories的文件中观察到。在spring-boot-autoconfigure的jar包中,找到META-INF文件夹,从中观察打开spring.factories。

四. 其他注解


Ⅰ. Conditional的组合注解

  • @ConditionalOnBean:当容器里有指定Bean的条件下
  • @ConditionalOnClass:当类路径下有指定的类的条件下
  • @ConditionalOnExpression:基于SpEL表达式为true的时候作为判断条件才去实例化
  • @ConditionalOnJava:基于JVM版本作为判断条件
  • @ConditionalOnJndi:在JNDI存在的条件下查找指定的位置
  • @ConditionalOnMissingBean:当容器里没有指定Bean的情况下
  • @ConditionalOnMissingClass:当容器里没有指定类的情况下
  • @ConditionalOnWebApplication:当前项目是Web项目的条件下
  • @ConditionalOnNotWebApplication:当前项目不是Web项目的条件下
  • @ConditionalOnProperty:指定的属性是否有指定的值
  • @ConditionalOnResource:类路径是否有指定的值
  • @ConditionalOnOnSingleCandidate:当指定Bean在容器中只有一个,或者有多个但是指定首选的Bean

这些注解都组合了@Conditional注解,只是使用了不同的条件组合最后为true时才会去实例化需要实例化的类,否则忽略过滤掉。

Ⅱ. @ConfigurationProperties

从配置文件中绑定属性到对应的bean上,与Value既有联系又有区别

  1. 自定义前缀(即,匹配掉前缀后的名称才对应Bean属性)
  2. 可以多级赋值
  3. 如果接受的是List类型,可以自动截取逗号

五. 启动原理(自动配置)


Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties 注解与全局配置文件中对应的属性进行绑定的。

原文地址:https://www.cnblogs.com/juzhuxiaozhu/p/13402416.html