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

Spring Boot启动过程

时间:2020-06-04 19:25:17      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:入口   packages   ioc   引入   important   otc   can   继承   spring   

写过Spring Boot都知道需要有一个入口类,这个类上面必不可上的需要有一个@SpringBootApplication注解还有run方法,下面我们讲一下他们。

@SpringBootApplication

点击进入该注解,我们可以发现其是一个复合注解,包括@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan

 

1、@ComponentScan 注解

这个注解在Spring中很重要,它对应XML配置中的元素,@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。

我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。

注:SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。

 

2、@EnableAutoConfiguration 注解

从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(Java Refletion)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。

 

过程:

@Import(AutoConfigurationImportSelector.class)  

  -->AutoConfigurationImportSelector

    --> SpringFactoriesLoader

      -->找到这个配置文件 META-INF/spring.factories

        -->配置文件中有org.springframework.boot.autoconfigure.EnableAutoConfiguration这个配置。

          -->这个配置内容很多,但不是都加载的,每个配置类中有@ConditionalOnClass注解,意思是只有满足条件才会加载。(个人理解是:pom文件引入jar包后,有了对应的类,条件成立,才可以引入对应配置内容)

 

 

3、@SpringBootConfiguration 注解

  1. @SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,
  2.  
    并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名
     

 

Spring Boot启动过程

标签:入口   packages   ioc   引入   important   otc   can   继承   spring   

原文地址:https://www.cnblogs.com/linhongwenBlog/p/13045386.html

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