SpringBoot 核心注解及启动过程

一、SpringBoot核心注解及其作用

@SpringBootConfiguration

声明为配置类(根配置类,首先扫描该类,本身是一个IOC容器的配置类),将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
SpringBoot使用Java Config技术进行配置,Java Config使用注解和Java代码的方式代替xml配置文件

  • 任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类。
  • 任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id。
@ComponentScan

自动扫描当前包及子包下被@Component,@Controller,@Service,@Repository注解标记的类,将其作为bean加载到IOC容器中。
不指定范围则默认从注解所在类的包下进行扫描。

@EnableAutoConfiguration

核心注解,是自动配置的入口,SpringBoot根据添加的jar包来进行项目的默认配置

二、SpringBoot自动配置如何实现

  • @EnableAutoConfiguration是实现自动配置的入口
  • 该注解又通过@Import注解完成导入配置的功能,导入了AutoConfigurationImportSelector,这是一个自动配置文件收集器
  • 该类中的selectImports()方法内部使用SpringFactoriesLoader.loadFactoryNames()方法进行扫描具有META-INF/spring.factories文件的jar包,返回类全名经过滤后返回一个类全名的数组
  • 返回的类全名通过反射被实例化,就形成了具体的工厂实例
  • 工厂实例来生成组件具体需要的bean,加载到IOC容器中
    SpringBoot 核心注解及启动过程_第1张图片
    spring.factories文件
  • 该文件中定义了关于配置类的初始化,监听器等信息,并使用EnableAutoConfiguration使自动配置生效
  • EnableAutoConfiguration中配置了多个自动配置相关类,在启动过程中会解析对应类配置信息
  • 每个Configuation类都定义了相关bean的实例化配置,使用@Conditonal注解声明自动配置的条件

三、SpringBoot的启动过程

  • 首先进入run方法,在run方法中创建一个SpringApplication实例,在构造方法内调用了初始化的initialize方法(创建监听器,加载springboot配置环境)
  • 执行run方法创建Spring容器
    SpringBoot 核心注解及启动过程_第2张图片

你可能感兴趣的:(Java,Web,java)