【Java ⾯试题】SpringBoot 启动原理
SpringBoot 启动原理
1、什么是SpringBoot
Spring Boot是由Pivotal团队提供的全新框架,其设计⽬的是⽤来简化新Spring应⽤的初始搭建以及开发过程。该框架使⽤了特定的⽅式来进⾏配置,从⽽使开发⼈员不再需要定义样板化的配置。通过这种⽅式,Spring Boot致⼒于在蓬勃发展的快速应⽤开发领域(Rapid Application Development)成为领导者。
Spring⼤家都知道,Boot是启动的意思。所以,Spring Boot其实就是⼀个启动spring项⽬的⼀个⼯具⽽已。从最根本上来讲,Spring Boot就是⼀些库的集合,它能够被任意项⽬的构建系统所使⽤。
2、SpringBoot 启动原理SpringBoot启动整体可分为两步:初始化⼀个SpringApplication对象
执⾏该对象的run()⽅法
想了解SpringBoot的启动原理,⾸先就要从项⽬的主启动类⼊⼿,说到主启动类那最关键的就是注解@SpringBootApplication 先看下SpringBoot主启动类:再看下@SpringBootApplication 注解的源码:从上述我们可以看出,实际上@SpringBootApplication 是⼀复合的注解,其中起到主要作⽤的注解是:
SpringBootConfiguration :继承了@Configuration注解,表⽰当前类是注解类
@EnableAutoConfiguration :开启SpringBoot的⾃动注解功能,器主要借助@import注解实现的
@ComponentScan :扫描路径配置(具体使⽤待配置)
所以我们把主启动类上⾯的注解写成这三个注解组合的形式其实也是可以的,整个SpringBoot应⽤依然可以与之前的启动类功能⼀样:@SpringBootApplication public  class  HelloWorldApplication {    public  static  void  main (String [] args ) {        SpringApplication .run (HelloWorldApplication .class , args );    }}
1
2
3
4
5
6@Target({ElementType .TYPE })//注解的适⽤范围,其中TYPE ⽤于描述类、接⼝(包括注解类型)或枚举类型@Retention(RetentionPolicy .RUNTIME )//注解的声明周期,保留到class ⽂件中(三个声明周期)@Documented //表名这个注解应该被javadoc 记录@Inherited //表名⼦类可以继承这个注解@SpringBootConfiguration //继承了@Configuration 注解,表⽰当前类是注解类@EnableAutoConfiguration //开启SpringBoot 的⾃动注解功能,器主要借助@import 注解实现的@ComponentScan(excludeFilters = {//扫描路径配置(具体使⽤待配置) @Filter(type = FilterType .CUSTOM , classes = {TypeExcludeFilter .class }),  @Filter(type = FilterType .CUSTOM , classes = {AutoConfigurationExcludeFilter .class }) })public  @interface  SpringBootApplication { ...}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
因为如果我们每次新建项⽬时都要写上这三个注解来完成配置,这显然太繁琐了,SpringBoot就为我们提供了@SpringBootApplication 这样⼀个复合注解来简化我们的操作。
3、三个关键注解解析
3.1、@SpringBootConfiguration 注解解析我们看下@SpringBootConfiguration 注解的源码@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = {        @Filter(type = FilterType .CUSTOM , classes = TypeExcludeFilter .class ),        @Filter(type = FilterType .CUSTOM , classes = AutoConfigurationExcludeFilter .class ) })public  class  HelloWorldApplication {    public  static  void  main (String [] args ) {        SpringApplication .run (HelloWorldApplication .class , args );    }}
1
2
3
4
5
6
7
8
9
10@Target({ElementType .TYPE })@Retention(RetentionPolicy .RUNTIME )@Documented @Configuration @Indexed public  @interface  SpringBootConfiguration {    @AliasFor(        annotation = Configuration .class 1
2
3
4
5
6springboot框架的作用
7
8

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。