面试题-2SpringBoot启动过程
Posted LeeBoom
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题-2SpringBoot启动过程相关的知识,希望对你有一定的参考价值。
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包中的自动配置类加到容器中并进行实例化,完成自动装配。
以上是关于面试题-2SpringBoot启动过程的主要内容,如果未能解决你的问题,请参考以下文章