码迷,mamicode.com
首页 > 编程语言 > 详细

【面试题-2】SpringBoot启动过程

时间:2021-05-24 08:34:19      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:OLE   image   启动过程   tco   开启   tor   复合   power   inf   

SpringBoot 启动类中的1个核心注解

@SpringBootApplication

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.boot.autoconfigure;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    Class<?>[] exclude() default {};

    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    String[] excludeName() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};

    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

可以看到一个@SpringBootApplication注解里已经包含了1.@SpringBootConfiguration 该注解主要是将当前类作为一个JavaConfig本质上和普通的@Configuration没有区别
2.@ComponentScan,该注解会用于扫描Spring对应的组件,如果里面不设置值,则会默认从所在类的package进行扫描。所以一般启动类都放在根package下
3.@EnableAutoConfiguration,该注解标识可以自动配置,把所有符合自动配置条件的Bean定义加载到IOC容器

SpringBoot启动流程

1.当我们启动SpringBoot的时候,先动用启动类中的静态run方法

技术图片

2.run方法中最重要的两个环节
a.创建 ApplicationContext容器
b.刷新 ApplicationContext容器
3.在刷新容器的时候会去解析启动类,而启动类的注解使用的是@SpringBootApplication,这是一个复合注解,里面包含了@ComponentScan,@EnableAutoConfiguration,@SpringBootConfiguration 这三个注解
4.三个注解中,@EnableAutoConfiguration会开启自动配置,同时会去依赖的包中寻找spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。
5.将jar包中的自动配置类加到容器中并进行实例化,完成自动装配。

【面试题-2】SpringBoot启动过程

标签:OLE   image   启动过程   tco   开启   tor   复合   power   inf   

原文地址:https://www.cnblogs.com/LeeBoom/p/mian-shi-ti2springboot-qi-dong-guo-cheng.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!