SpringBoot

Springboot

依赖管理:

  • 父项目依赖管理
  • 开发starter场景启动器
  • 无需关注版本号,自动版本仲裁
  • 可以修改版本号(在当前项目里重写配置

自动配置

  • 自动配好Tomcat
  • 自动配好SpringMVC(引入SpringMVC全套组件,自动配置好springMVC常用组件)
  • 自动配置好web常见功能
  • 默认的包结构(主程序包及子包就能被默认扫描,如果需要扫描其他包,可以在主程序注解后加scanBasePackages=“包名”)
  • 各种配置拥有默认值(默认配置最终都是映射到java类)
  • 按需加载所有自动配置项

容器功能

xml配置的方式容器加入组件

@Configuration:

创建容器对象不用在xml进行配置,创建一个类并加上@Configuration就是配置类;

//默认是单例模式,不管创建多少对象都是同一个,配置类本身也是一个组件;proxyBeanMethods:代理bean的方法
@Configuration(proxyBeanMethods=true(默认创建的都是重容器里找))(false是方法调用不在容器里找直接创建)
public class MyConfig{
    
    //方法名就是组件名,类名就是组件类型
    @Bean
    public User user01(){
        return new User("","", );
    }
}
//@Bean("user02"),组件名就是user02;
  • 配置类组件之间无依赖关系用Lite模式(false)加容器启动过程减少判断

  • 配置类组件之间有依赖关系使用Full(true默认)方法会被调用之前单实例组件会在容器里找;

@Import

给容器中导入一个组件。写在容器的组件类上,是一个class数组可以导入很多组件(调用导入组件的无参构造)

@Conditional

条件装配:满足Conditional指定的条件,则进行组件注入

@ImportResource

配置绑定:

@ConfigurationProperties(prefix="属性在配置文件中的前缀")+@Conmpent(加入容器当中)

@EnableConfigurationProperties(开启属性配置绑定功能,自动注册到容器中,在配置类中写)


自动配置原理

引导加载自动配置类

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

    • @Configuration代表当前是一个配置类
  • @ComponentScan指定扫描那些,Spring注解

  • @EnableAutoConfiguration

    @AutoConfigurationPackage
    @Import({AutoConfigurationImportSelector.class})
    public @interface EnableAutoConfiguration {}
    
    • @AutoConfigurationPackage自动配置包

      @Import({Registrar.class})//给容器导入一个组件
      public @interface AutoConfigurationPackage {}
      //利用Registrar给容器导入一系列组件,将MainApplication所在包下的所有组件导入
      
    • @Import({AutoConfigurationImportSelector.class})

    利用getAutoConfigurationEntry(AnnotationMetadata annotationMetadata),给容器批量导入组件
    调用List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);获取到所有需要导入容器的配置类
    利用工厂加载Map<String, List<String>> loadSpringFactories(ClassLoader classLoader);得到所有组件;
    从META-INF/spring.factories位置加载一个文件。
        默认扫描我们当前系统所有META-INF/spring.factories位置文件
    

    127个场景的所有自动配置启动后默认全部加载:XXXAutoConfiguration,按照条件装配规则(@Conditional),最终回按需配置。

  • Springboot先加载所有的自动配置类XXXAutoConfiguration

  • 每个自动配置类按照条件进行生效,默认都会绑定知道你过的值在XXXProperties配置文件进行绑定

  • 生效的配置文件就会给容器装配很多组件

  • 只要容器中有这些组件相当于有了这些功能

  • 定制配置:用户直接自己的@Bean替换底层的组件。

**XXXAutoConfiguration-->组件--->XXXProperties里面取值--->application.properties

posted @ 2021-01-11 13:38  L#  阅读(61)  评论(0)    收藏  举报