Java中SpringBoot自动装配的原理是什么


本文小编为大家详细介绍“Java中SpringBoot自动装配的原理是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中SpringBoot自动装配的原理是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。为了研究,我们正常从父项目的pom.xml开始进行研究。父依赖 spring-boot-starter-parent主要用来管理项目的资源过滤和插件点父依赖进去查看,发现还有一个父依赖spring-boot-dependencies,这里的这个父依赖才是真正管理springboot应用里面的所有依赖版本的地方,是springboot的版本控制中心。启动器:spring-boot-starter-xxx:springboot的场景启动器spring-boot-starter-web:导入web依赖的组件@SpringBootApplication作用:标注这是一个springboot主程序类,说明这是一个springboot应用,springboot就是运行这个类的mian方法启动的springboot应用。点@SpringBootApplication继续研究,会发现有@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解1.@ComponentScan: spring自动扫描包这个我们在spring配置文件中见到过,它用来自动扫描并加载符合条件的组件或者bean,并将bean加载到IOC容器中。2.@SpringBootConfiguration: springboot的配置类标注在某个类上,说明这个类是springboot的配置类,在这里它就说明SpringBootApplication这个类是springboot的配置类。我们继续点@SpringBootConfiguration进去查看,会发现 @Configuration这个注解2.1 @Configuration:配置类,用来配置spring的xml文件我们继续点@Configuration进去查看,会发现 @Component这个注解。2.2 @Component:组件,说明启动类本身也是一个组件,负责启动应用。至此,@SpringBootConfiguration这条线,我们研究完了。3.@EnableAutoConfiguration:开启自动装配,通过@EnableAutoConfiguration来帮我们自动配置之前我们需要配置的东西。
我们继续点@EnableAutoConfiguration进去查看,会发现 @AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class}) 这两个注解。3.1 @AutoConfigurationPackage自动装配包继续点进去查看,出现@Import({Registrar.class})这个注解3.1.1 @Import({Registrar.class}): spring底层注解,给容器导入一个组件Registrar.class: 将主启动类所在包及所在包下面的所有子包里面所有的组件都扫描到Spring容器。至此,@AutoConfigurationPackage这条线我们也研究完了。3.2 @Import({AutoConfigurationImportSelector.class}): 给容器导入组件AutoConfigurationImportSelector.class:自动装配导入选择器。1.我们点进去AutoConfigurationImportSelector.class这个类的源码进行探究,2.我们点击getCandidateConfigurations进一步分析2.1 使用了getSpringFactoriesLoaderFactoryClass()方法,返回一开始我们看到的启动自动配置文件的注解类EnableAutoConfiguration.class2.2 发现它调用了SpringFactoriesLoader类的静态方法,我们点击loadFactoryNames进入loadFactoryNames()发现它又调用了loadSpringFactories()方法,点进去查看源码分析:MultiValueMap result = (MultiValueMap)cache.get(classLoader);获得classLoader,我们返回可以看到这里得到的就是EnableAutoConfiguration标注的类本身Enumeration urls = classLoader != null ? classLoader.getResources(“META-INF/spring.factories”) : ClassLoader.getSystemResources(“META-INF/spring.factories”);获取一个资源 “META-INF/spring.factories”while循环,读取到的资源遍历,封装成为一个Properties
我们在上面的自动配置类随便找一个打开看看,比如 :WebMvcAutoConfiguration都是大家熟悉的配置,所以,自动配置真正实现是从classpath中搜寻所有的META-INF/spring.factories配置文件 ,并将其中对应的 org.springframework.boot.autoconfigure. 包下的配置项,通过反射实例化为对应标注了 @Configuration的JavaConfig形式的IOC容器配置类 , 然后将这些都汇总成为一个实例并加载到IOC容器中。SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值将这些值作为自动配置类导入容器,自动配置类就生效,帮我们进行自动配置工作;整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;
SpringApplication分析:SpringbootApplication.class:应用参数的入口args:命令行参数该方法返回的是一个ConfigurableApplicationContext对象
SpringApplication主要做的事情:推断应用的类型是普通的项目还是Web项目查找并加载所有可用初始化器 , 设置到initializers属性中找出所有的应用程序监听器,设置到listeners属性中推断并设置main方法的定义类,找到运行的主类读到这里,这篇“Java中Spring免费云主机域名Boot自动装配的原理是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: Feign怎么解决服务之间调用传递token

这篇“Feign怎么解决服务之间调用传递token”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Feign怎么解决服务之间调用传递token”文…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/01 09:05
Next 09/01 09:05

相关推荐