springboot源码阅读需要提前了解的知识点

SpringBoot 源码透彻解析——必须提前了解的几个知识点(这些玩意充斥到springboot源码的各个角落)

  1. SpringFactoriesLoader.loadFactories(ApplicationContextFactory.class,getClass().getClassLoader() : 根据 spring.factories文件,获取实现类的实例;
  1. Binder.get(environment).bind(“spring.main”, Bindable.ofInstance(this)); 绑定配置文件属性到相关类实例;
  1. BeanDefinitionRegistry 用来将beanDefinition注册到容器(还没生成bean);
  1. RootBeanDefinition ChildBeanDefinition GenericBeanDefinition的作用 ;
  1. spring.factories : 用来记录需要自动装配的配置类;
    spring-autoconfigure-metadata.properties:用来记录配置类的装配条件(ConditionOnClass, ConditionOnBean等等)

      注意1:这里有一个细节,在spring-autoconfigure-metadata.properties里面写Condition等条件等 同于在配置类上写,    并且启动快;
    
      注意2:@ConditionOnClass(XXX.class)用在类上安全(判断时是加载的class原文件进行ASM技术解析文件)而用在方法上是不安全的,如果不存在类会报错 sun.reflect.annotation.TypeNotPresentExceptionProxy,所以这个注解只放在类上或者放在方法上用name属性@ConditionOnClass(name="org.example.user");
    
  1. idea里面 Properties指的是提供了get/set方法的私有字段,Field指的是没有提供get/set方法的私有字段只在本类访问;
  1. option和provided都表示依赖不传递;

      optional 表示某个依赖可选,该依赖是否使用都不会影响服务运行。例子:吃面时候,酱油就是可选的,加不加都不会影响面的正常使用。
      provided 表示某个依赖必须,不过该依赖通常是由系统或者容器提供,不提供会报错,不需要自己关系。例子:吃面时候,筷子、碗这样的东西都是必须的,不过这些一般是店家给顾客备好,不需要顾客自带。
    

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