【JAVA】 SpringBoot2.X 核心注解原理分析及ApplicationContext应用上下文创建过程

约定大于配置

百度百科

约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。

SpringBoot即是约定大于配置的充分体现,包括SpringCloud也是这样。

启动main函数

这是大家最常见的springboot的启动main函数写法。

在这个启动类上最常用的一个注解就是@SpringBootApplication

这是一个组合注解,如下

所以

@SpringBootApplication可以用下面三个核心注解代替

@Configuration

@ComponentScan

@EnableAutoConfiguration

@Configuration

等同于springMVC里的xml配置文件,里面可以自定义

表明纳入spring容器管理

常见用法,如在工程中配置一个ShardedJedisPool实例,通过@Configuration结合@Bean来配置

@ComponentScan

组件扫描定义

通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。

所以一般springboot工程的启动类class定义在最外层的那个package下,就不用定义basePackages了

@EnableAutoConfiguration

这个是springboot中最重要的一个注解,auto config 自动配置是springboot最明显的一个特点了。

跟大部分Enable开头的注解功能类似,借助@Import的支持,收集和注册特定场景相关的Bean定义。

@EnableAutoConfiguration将所有符合自动配置条件的Bean加载到spring 容器中。

从ApplicationContext开始的流程先略过,这里从下面的几个步骤看看auto config的流程

这里调用了 getAutoConfigurationEntry方法

这里调用了getCandidateConfigurations方法

这里用到了核心类SpringFactoriesLoader,会去加载spring.factories文件。

这里可以看到具体的spring.factories文件的内容

ApplicationContext应用上下文创建

整个启动流程,就通过main方法里的run一步一步跟进去看即可,这里说下ApplicationContext应用上下文的实例化过程。

这里的run方法

SpringBoot启动过程中还有配置加载等一系列操作,这里略了

最终通过BeanUtils的instantiateClass方法创建了应用上下文。

这里看下webApplicationType这个参数的赋值过程,spring中是提供了webflux的开发框架,但是我们还没用过。

网上看到的一段话,看来webflux可以一试啊

Netty作为java领域首屈一指的nio框架,其以优越的性能被众多中间件所使用。但到了java的web开发领域,却很难享受到Netty的性能优势。其原因在于传统web开发基于servlet容器,许多依赖和开发框架都是基于servlet实现的,比如spring。而netty为了保持代码的简单和高效,并没有实现servlet标准,这就导致将web容器迁移到netty后许多框架和第三方库不能使用,迁移的成本过大。但spring webflux出现改变了这一现状。她在兼容原有mvc开发方式的同时,重写和实现了大量第三方库,在提升性能的同时,降低了迁移的成本。同时spring webflux适配多种web容器,即使仍然使用tomcat也是可以的。

发布了227 篇原创文章 · 获赞 211 · 访问量 73万+

猜你喜欢

转载自blog.csdn.net/chiweitree/article/details/104396068
今日推荐