昨天,有位在广州工作4年的小伙伴,在面试中被问到SpringBoot自动装配原理,当时,自我感觉比较好,他要的是30K,但是都没有拿到Offer。今天,我给大家分享一下我的理解。
SpringBoot自动装配主要是基于注解编程 和 约定优于配置的思想来设计的。
自动装配就是由Spring自动把其他组件中的Bean装载到IoC容器中,不需要开发人员再去配置文件中添加大量的配置。我们只需要在Spring Boot的启动类上添加 @SpringBootApplication 注解,开启自动装配。
这种自动装配的思想,在Spring 3.x以后就开始支持,我们只要在类上添加 @Enable 注解就可以了,只是没有像Spring Boot这样全面地去设计。
因此,Spring 和 Spring Boot的最大区别就是在于Spring Boot的自动装配。那自动装配的原理又是什么呢?
@SpringBootApplication这个注解是暴露给用户使用的入口,它的底层是由 @EnableAutoConfiguration这个注解来实现的。
这样一个自动装配的实现,我把它归纳为以下三个核心步骤:
第一步:启动依赖组件的时候,组件中必须要包含 @Configuration 的配置类,在这个配置类里面声明为 @Bean 注解,就将方法的返回值或者属性值 注入到IoC容器中。
第二步:如果是使用第三方jar包,Spring Boot采用SPI机制,只需要在/META-INF/目录下增加spring.factories配置文件。然后,Spring Boot会根据约定规则,自动使用SpringFactoriesLoader来加载配置文件中的内容。
第三步:Spring获取到第三方jar中的配置以后,会使用调用ImportSelector接口来完成动态加载。
这样的设计的好处在于,大幅减少了臃肿的配置文件,而且各模块之间的依赖实现了深度解耦。比如,我们使用Spring创建Web程序时需要导入非常多的Maven依赖,而Spring Boot只需要一个Maven依赖来创建Web程序,并且Spring Boot还把我们最常用的依赖都放到了一起,我们只需要 引入 spring-boot-starter-web 这一个依赖就可以完成一个简单的Web应用。
以前用Spring的时候需要XML文件配置开启一些功能,现在Spring Boot不用XML配置了,只需要写一个, 加了@Configuration注解 或者实 现对应接口的配置类就可以了。
最后,我总结一下,Spring Boot自动装配是Spring的完善和扩展,就是为我们便捷开发,方便测试和部署,提高效率而诞生的框架技术。
小伙伴们,如果你被问到过Spring Boot自动装配原理的问题,你是怎么回答的呢?可以在评论区分享你的回答。