前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >梳理srping boot 的几个核心基础知识点

梳理srping boot 的几个核心基础知识点

作者头像
海涛
发布2019-09-09 16:57:34
5120
发布2019-09-09 16:57:34
举报
文章被收录于专栏:海涛技术日常海涛技术日常

产生的背景:

spring boot之前,使用ssh或者ssm等框架开发,需要繁多的配置文件,开发效率较低,部署运维也较为麻烦,这时候为了解决这些问题spring boot 就应运而生了。

官网简介: Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.

主要阐述和记录spring boot 的核心功能,底部附官网链接:

  1. 一个可以独立运行的spring 项目
  2. 内嵌了Servlet容器
  3. 提供大量的starter 简化maven配置
  4. 自动配置spring,根据引入的maven包(jar包),为里面的类自动配置bean(大部分,并不是所有)
  5. 提供了准生产的应用监控
  6. 无代码生成和xml配置,通过条件注解来实现

总结:

1-3、5是为了简化开发流程做的封装和优化,4和6为其核心特色

简述总流程:启动,扫描所有含有 META-INF/spring.factories 的jar包,根据这个文件加载配置类,根据配置类加载满足条件的bean。

源码阅读和分析:

  1. SpringBootApplication 注解:
    • 核心启动注解,为组合注解
    • 通过EnableAutoConfiguration 实现根据引入了哪些jar包自动配置
    • @AutoConfigurationPackage
    • @Import({AutoConfigurationImportSelector.class})
    • AutoConfigurationImportSelector 这个类是动态引入
代码语言:javascript
复制
public String[] selectImports(AnnotationMetadata annotationMetadata) {
        if (!this.isEnabled(annotationMetadata)) {
            return NO_IMPORTS;
        } else {
            AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);
            AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);
            return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
        }
 }
 public static AutoConfigurationMetadata loadMetadata(ClassLoader classLoader) {
        return loadMetadata(classLoader, "META-INF/spring-autoconfigure-metadata.properties");
 }
 protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
 }
  1. starter 模块原理:
    • 最浅显的为,封装了某个功能所有的相关依赖包和对应的版本号
    • 封装好的starter模块如何需要添加默认配置,这时候要参考上一个知识点了
    • META-INF/spring-autoconfigure-metadata.properties
    • META-INF/spring.factories

如果对bean的生成有疑惑:

参考地址:

  1. https://spring.io/projects/spring-boot
  2. https://objcoding.com/2018/02/02/Costom-SpringBoot-Starter/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档