Java学习资料整理-SpringBoot自动装配

253 阅读2分钟

SpringBoot在启动的时候无需任何的配置文件,无需各种繁杂的POM坐标,只需要一个main方法就能够运行起来了,与其他框架整合也很方便,这是为什么呢?这要得益于SpringBoot的自动装配,那么Spring Boot的自动装配原理是什么呢? 首先从SpringBoot的启动类来入手,在Spring Boot的启动类上,一般会加上@SpringBootApplication这个注解,而在这个注解里面有这样一个注解:@EnableAutoConfiguration

image.png

其中@EnableAutoConfigurationPackage会将当前配置类所在的包保存在basePackages的Bean中,供Spring内部使用。 其中@EnableAutoConfiguration的类上有一个@Import注解,引入了AutoConfigurationImportSelector 这个类

image.png

它有一个方法很关键,就是getAutoConfigurationEntry方法。这个方法会扫描所有jar包里的META-INFO下面的spring.factories文件,然后进行排重,再获取不需要自动装配的类名单并将其排除掉,再通过OnXXXCondition注解将一些不需要注入的Bean过滤掉

image.png

找到spring.factories后,会将其中的全限定类名称读取出来,并加载到Spring的容器中,从而实现自动装配。

扩展,如何自定义starter SpringBoot最强大的功能就是把我们常用的场景抽成了一个个starter,我们通过引入这些starter再进行少量的配置就可以使用相应的功能。 如果要写自定义的starter,以下的一些功能是必须要有的

image.png

另外写starter有几点规范

  • 启动器(starter)是一个空的jar文件,仅仅提供辅助性依赖管理,这些依赖可能用于自动装配或其他类库。
  • 需要专门写一个类似spring-boot-autoconfigure的配置模块
  • 用的时候只需要引入启动器starter,就可以使用自动配置了

最后在resources下面新建META-INFO文件夹新建一个spring.factories文件,将autoConfiguration配置文件的全路径名写进去

image.png

同样的最后补充配置类

image.png

到这就完成了自定义starter的编写