SpringBoot自动装配原理
自动配置简单来说呢,就是将第三方的组件自动装载到IOC容器里面,不需要开发人员再去编写相关的配置,在SpringBoot应用里面呢只需要加上@SpringBootApplication注解就可以实现自动配置,SpringBootApplication它是一个复合注解,真正实现自动装配的注解是 @EnableAutoConfiguration 注解。自动装配的实现呢主要依靠三个核心的关键技术:
1)引入Starter,启动依赖组件的时候,这个组件里面必须包括@Configuration配置类,然后我需要通过Bean注解去声明需要装配到IOC容器里面的Bean对象
2)这个配置类是放在第三方的jar包里面,然后通过Spring Boot中约定大于配置的理念,去把配置类的全路径放在件META_INF/Spring.factories文件里面,SpringBoot就可以知道第三方jar包里面配置类的位置,它主要是依靠Spring里面的SpringFactorierLoader来完成的
3)SpringBoot拿到所有第三方jar包声明的配置类之后,再通过ImportSelector这样一个接口来实现对这些配置类的动态加载,从而去完成自动装配这样的一个动作。
自己总结:
起着主要作用的是@SpringBootApplication注解,它是一个复合注解,其中有一个@EnableAutoConfiguration注解,这个注解也是一个复合注解,它的作用主要是开始自动配置的原理。它里面有一个 @Import注解 ,这个注解导入了一个类AutoConfigurationImportSelector。这个类实现了ImportSelector接口,重写了里面的selectImports方法,这个方法的返回值是String数组,该方法主要用于获取所有符合条件的类的全限定类名,这些类需要被加载到 IoC 容器中。在这个类内部调用了同类的getAutoConfigurationEntry()方法,在这个方法中调用了SpringFactoriesLoader类中的loadFactoryNames()方法,在这个方法内部明确写出扫描META-INF/spring.factories文件下的所有类的全类名。在这个方法中获取到所有类的全类名之后就返回,直到返回到调用它的方法中,也就是getAutoConfigurationEntry()方法。这个方法中获取到所有类的全类名之后并不会全部加载,而是会做一次过滤,将符合条件的类通过ImportSelector接口进行动态的加载。
自己结合源码画的图: