亲宝软件园·资讯

展开

SpringBoot自动配置与启动流程详细分析

OlaiolaiO 人气:0

一、自动配置

主启动类

//@SpringBootApplication 来标注一个主程序类
//说明这是一个Spring Boot应用
@SpringBootApplication
public class SpringbootApplication {
   public static void main(String[] args) {
     //以为是启动了一个方法,没想到启动了一个服务
      SpringApplication.run(SpringbootApplication.class, args);
   }
}

@SpringBootApplocation注解内部

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    // ......
}

1. @ComponentScan

这个注解在Spring中很重要,它对应XML配置中的元素。

作用:自动扫描并加载符合条件的组件或者bean,将这个bean定义加载到IOC容器中。

2. @SpringBootConfiguration

作用:SpringBoot的配置类,标注在某个类上,表示这是一个SpringBoot的配置类;

@Configuration 作用:允许在上下文中注册额外的bean或倒入其他配置类

//@SpringBootConfiguration注解内部
//这里的 @Configuration,说明这是一个配置类 ,配置类就是对应Spring的xml 配置文件;
@Configuration
public @interface SpringBootConfiguration {}
//里面的 @Component 这就说明,启动类本身也是Spring中的一个组件而已,负责启动应用
@Component
public @interface Configuration {}

3. @EnableAutoConfigeration

作用:启用SpringBoot的自动配置机制

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.context.annotation.Import;
@Target({ElementTypeTYPE})
@Retention(RetentionPolicy.RUNTIME)@Documented
@Inherited
@AutoconfigurationPackage
@Import( {AutoconfigurationImportselector.class})
public @interface EnableAutoconfiguration{
    string ENABLED_OVERRIDE_PROPERTY ="spring.boot.enableautoconfiguration" ;
    class<?>[]exclude() default {};
    string[ ] excludeName( ) default {};
}

@AutoConfigurationPackage :自动配置包

//AutoConfigurationPackage的子注解
//Registrar.class 作用:将主启动类的所在包及包下面所有子包里面的所有组件扫描到Spring容器 
@Import({Registrar.class})
public @interface AutoConfigurationPackage {
}

@EnableAutoConfigeration 注解通过Spring提供的 @Import 注解导入了 AutoConfigurationImportSelector 类; AutoConfigurationImportSelector 类中 getCandidateConfigurations 方法会将所有自动配置类的信息以List的形式返回,这些配置信息会被Spring容器作Bean来管理。

 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;
    }

4. @Condition

在Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操作。

以上注解在springBoot-autoconfigure的condition包下。

总结原理

启动流程

加载全部内容

相关教程
猜你喜欢
用户评论