面试题-SpringBoot如何实现自动配置?
只需要在config中配置auto-scann,系统就会自动启动扫描指定的包和类
SpringBoot是如何运行的?
如果没有,我们建议使用SpringApplication的静态方法。这样就简单的在这个方法中创建了家族的SpringApplication对象实例,然后在动态链接库中创建了创建的SpringApplication的实例方法。当SpringApplication 实例初始化并设置后,几天后它会做几件事:
根据类路径中是否存在某个特征类()来判断是否有必要为Web应用程序创建ApplicationContext类型。
不要使用SpringFactoriesLoader 搜索并以编程方式加载应用程序类路径中的所有applicationContextInitializer。
建议使用SpringFactoriesLoader来检查并打开应用程序的类路径中程序使用的所有ApplicationListener。
确定并设置main方法的定义类。
2)SpringApplication实例的初始化就可以完成了,但是系统设置完成之后,就开始执行move方法的逻辑了。该方法执行从2020年开始,首先遍历并执行所有可以从SpringFactoriesLoader直接输入并被程序加载的SpringApplicationRunListener。内部函数的started()方法告诉这些SpringApplicationRunListener,“嘿,SpringBoot应用程序即将开始执行!”。
3) 创建并配置当前Spring Boot 应用程序将能够使用的环境(除了配置要使用的PropertySource 包括Profile 之外)。
4)遍历数组全局函数中所有SpringApplicationRunListener的environmentPrepared()方法,并帮助它们:“当前SpringBoot应用到推荐的Environment已经准备好了!”。
5) 如果SpringApplication的showBanner属性设置为true,则再次打印banner。
6)参考用户是否比较清楚系统已经设置了applicationContextClass类型以及系统初始化阶段的判断结果,决定当前SpringBoot应用应该创建什么类型的ApplicationContext并修改,然后根据条件判断是否添加ShutdownHook,决定是否建议使用可定制的BeanNameGenerator,决定是否使用自定义的ResourceLoader,当然最重要的是,将规划的Environment设置为创建家族的ApplicationContext。
7)ApplicationContext族创建完成后,SpringApplication会再次使用Spring-FactoriesLoader,检查并运行程序类路径下的所有ApplicationContext-Initializers,然后遍历流程并调用这些ApplicationContextInitializers的initialize(applicationContext)方法提前创建角色ApplicationContext 参与进一步的处理。
8)遍历并调用所有SpringApplicationRunListener的contextPrepared()方法。
9)核心三步,首先是打开程序从@EnableAutoConfiguration资源的所有配置到这些其他形式的IoC容器配置再到同样万事俱备的ApplicationContext。
10)遍历动态链接库中所有SpringApplicationRunListener的contextLoaded()方法。
11)调用ApplicationContext的refresh()方法,完成IoC容器和使用的最后两个过程。
12) 直接输入CommandLineRunner是否可以在当前ApplicationContext中注册,如果不能,则遍历数组执行它们。
13)正常情况下,SpringApplicationRunListener的finished()方法无法通过遍历树来执行。一遍又一遍)