zoukankan      html  css  js  c++  java
  • 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 注解与全局配置文件中对应的属性进行绑定的。

  • 相关阅读:
    JavaScript数组升降序排列、最大值、最小值等
    css3箭头
    隐藏显示
    最后一个 last-of-type
    jquery函数封装
    为什么要使用rem
    Git的使用--如何将本地项目上传到Github
    jQuery判断是否选中
    数组索引赋值
    HTML中input和button设置同样高度却不能等高的原因
  • 原文地址:https://www.cnblogs.com/juzhuxiaozhu/p/13402416.html
Copyright © 2011-2022 走看看