SpingBoot----springboot的@SpringBootApplication注解的简单分析06

本文深入解析Spring Boot核心注解@SpringBootApplication的工作机制,从组件注册、自动配置导入到包扫描全过程,揭示Spring Boot应用快速启动的秘密。

上面的图是@SpringBootApplication注解和所包含的注解的目录

1.@Component:这是spring的注解,这个注解的作用:

(把类实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>

2.@Configuration:用于定义配置类,可替换xml配置文件(这里先简单的理解,有空再去加深一下spring)

3.@SpringBootConfiguration:标注了这个注解表示这是一个springboot的配置类

注意:配置类就是配置文件的替代品,配置类本身需要配置就首先要成为容器中的一个组件。

作用:就是把你的主类作为组件首先添加到容器里面先(配置类写上@Configuration注解等其他注解

-------------------------------------------------------------------------------------------------------------------------------

1.@Import:导入配置类或者普通Java,把这些类作为组件、或者配置类引入到spring容器中

2.Registerar.class,metadata这个参数获取的是注解的元信息,@SpringBootApplication是标注在启动类上的,就是获取这个类的信息,然后这里我们获取它的所在位置(即包名)

static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
        Registrar() {
        }

        public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
            AutoConfigurationPackages.register(registry, new String[]{(new AutoConfigurationPackages.PackageImport(metadata)).getPackageName()});
        }

        public Set<Object> determineImports(AnnotationMetadata metadata) {
            return Collections.singleton(new AutoConfigurationPackages.PackageImport(metadata));
        }
    }

作用:把标注了@AutoConfigurationPackage标注的类所在的包及其子包下的所有组件扫描到spring容器中

------------------------------------------------------------------------------------------------------------------------------

@Import({AutoConfigurationImportSelector.class})自动配置选择器

Ctrl+点击进入可以看到getAutoConfigurationEntry这个方法,打断点查看

List<String> configurations这个变量里面有大量的自动配置类的名字。

有了这些配置我们就可以省下很多需要麻烦了。

而这些自动配置类的名字是从哪里来的呢?

点击getAutoConfigurationEntry这个方法调用的

getCandidateConfigurations方法里面找到调用的

loadFactoryNames(),这个方法的参数里面有1.自动配置类 2.类加载器

继续进入方法里面,再点击loadSpringFactories可以看到

在这个包里面打开找到对应的文件,打开自己看看你就明白那些自动配置类是从哪里来的了。

作用:导入大量的自动配置类到容器里面。

--------------------------------------------------------------------------------------------------------------------------------------------------------

最后总结:

一:其实就是@SpringBootApplication这个注解把主类作为组件放到容器中先

二:可是实主类是什么也没有的,那么@SpringBootApplication在为这个主类添加自动配置的注解,注解里面把主类所在包下的所有组件扫描然后也放入容器中。

三:这样也不行啊,要自己写太多的组件很麻烦的,那么就通过一个配置文件,把所有的其他组件的名字都列出来,然后通过这个名单把那些jar包组件全部都自动配进来。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值