springboot核心原理之@SpringbootApplication

1.@SpringbootApplication

@Configuration标志的类 在spring ioc启动的时候就会加载创建这个类对象

@EnableAutoConfiguration 中有两个注解

(1)@AutoConfigurationPackage 扫描主程序包(主程序main所在包及其子包)
可以看到这个类 :
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
这个类是注册组件的

	 public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
        AutoConfigurationPackages.register(registry, (String[])(new PackageImports(metadata)).getPackageNames().toArray(new String[0]));
    }
		AnnotationMetadata 启动类的一些元信息
		debug打这个断点的时候  执行	new PackageImports(metadata)).getPackageNames() 可以得到主程序所在包的包名
	这个注解两个作用:
	利用@import给容器导入组件和把主程序所在的包的所有组件导入进来		

( 2 )	@Import({AutoConfigurationImportSelector.class}) 向容器中注入类

springboot核心原理之@SpringbootApplication_第1张图片

加载自动配置类
在这里插入图片描述

扫描spi文件
springboot核心原理之@SpringbootApplication_第2张图片
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}

组件扫描 排除一些组件
(1)这个类实现springboot核心原理之@SpringbootApplication_第3张图片
(2)排除已经扫描进来的配置类和自动配置类

在这里插入图片描述

重新启动看执行顺序 先@ComponentScan( 再@EnableAutoConfiguration 最后 @SpringBootConfiguration

run中看 停留在refreshcontext(context)

springboot生命周期:
springboot核心原理之@SpringbootApplication_第4张图片
自动配置在初始化组件创建中 stated 中refresh是在调用spring 最外层就是启动ioc容器 ioc容器造工厂 工厂造组件
准备工厂可以理解为放车间 放流水线
finishBeaFactoryInitialzation 开始造扫描出的组件 调用无参构造器 或者有参构造器创建
这些组件会被创建
@Configuration
@Componet
@Bean
@Service
。。。

你可能感兴趣的:(spring,boot,java,后端)