面试终极宝典:Springboot自动装配原理

Springboot的自动装配过程,网上大多都是罗列代码,即使看完了,也还存在很多的疑点。下面,这是我总结的在面试过程中介绍SpringBoot自动装配原理的话术,拿来即用就可。

Springboot自动装配过程:(每个步骤后的括号是对应的操作)

1. SpringBoot启动的时候会通过@EnableAutoConfiguration注解找到spring-boot-autoconfigure jar包下面的META-INF/spring.factories配置文件中的所有的EnableAutoConfiguration的配置,形成一个候选集;(getCandidateConfigurations(annotationMetadata, attributes)操作)

2. 接下来,先去除掉候选集中的一些重复的自动配置类,因为我们可能会在pom文件中重复引入;(removeDuplicates(configurations);)

3. 然后再根据exclusions排除掉不希望自动装配的类,这个exclusions可以在@EnableAutoConfiguration注解的exclude属性和excludeName属性中指定,也可以在properties文件中通过spring.autoconfigure.exclude来指定;(getExclusions(annotationMetadata, attributes))

4. 再就是根据在pom文件中引入的starter以及一些自定义的配置文件来过滤掉我们不希望进行自动加载的配置类;(getConfigurationClassFilter().filter(configurations))

5. 最后再去加载剩下的自动配置类。(fireAutoConfigurationImportEvents(configurations, exclusions))

上面的部分是话术,感兴趣的可以大致看下流程,相关代码如下:

    @Override
	public String[] selectImports(AnnotationMetadata annotationMetadata) {
		if (!isEnabled(annotationMetadata)) {
			return NO_IMPORTS;
		}
		AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(annotationMetadata);
		return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
	}    


    protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
		if (!isEnabled(annotationMetadata)) {
			return EMPTY_ENTRY;
		}
		AnnotationAttributes attributes = getAttributes(annotationMetadata);
		List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
		configurations = removeDuplicates(configurations);
		Set<String> exclusions = getExclusions(annotationMetadata, attributes);
		checkExcludedClasses(configurations, exclusions);
		configurations.removeAll(exclusions);
		configurations = getConfigurationClassFilter().filter(configurations);
		fireAutoConfigurationImportEvents(configurations, exclusions);
		return new AutoConfigurationEntry(configurations, exclusions);
	}

上述两个方法定义在AutoConfigurationImportSelector类中。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 最近越来越多的公司开始关注AI和大数据,这也就导致了Python这门编程语言的热门程度不断攀升。随着Python的普及,与之相关的面试也愈加激烈。如果你想在面试中脱颖而出,那你需要了解一些基础的Python面试题。 而《面试宝典:深入理解这110道Python面试题》正是一本非常好的参考书籍。该书包含了各种类型的面试题,涵盖了python的基础、数据结构、算法、面向对象编程、函数式编程、并发编程、Web开发、网络编程、AI、大数据等方面的知识。 本书的优点不仅仅局限于提供面试题目,更重要的是它会详细的分析每个题目的解决思路,还会对每个解决方案给出相应的优缺点和应用场景。同时这些面试题也是由不同公司的面试官精选,保证了题目的多样性和适用性。 Python已经成为了AI和大数据领域的主力语言。掌握Python面试题所需要的知识对于程序员来说是非常有利的,因为通过这些题目的掌握,可以加强自己对Python的基础和应用,也可以让自己更好地应对面试。参考这本书,不仅可以帮助你更好地备战Python的面试,更可以为你在AI和大数据领域提供必要的技能支持。 ### 回答2: Python是当今世界上最为流行的编程语言之一,它具有易学、易用、高效、可移植等优点,在人工智能和大数据领域尤为广泛应用。因此,掌握Python编程语言是未来求职市场竞争的必备技能。而《面试宝典:深入理解这110道python面试题,ai和大数据向你招手》则是为Python程序员所准备的面试参考资料。 这本书针对Python的AI和大数据领域所涉及的知识点,包括但不仅限于基础语法、面向对象、函数式编程、IO流操作、多线程编程、内存管理、网络编程、数据库操作等方面,针对面试官常问的问题进行深入解析,给出详细的解答,涉及的面试题目覆盖了各个职位级别和不同难度的面试题。无论是初学者还是有经验的开发者,都可以从中收获很多。 了解以上面试科目的本质和规律,能够帮助我们抓住核心概念,快速准确的把握题意,并给出优秀的回答方案。基于此,读完这本书不仅能够帮助我们顺利通过Python相关的面试,还能够提高我们的技能水平,更好地开展工作。 ### 回答3: 最近,随着人工智能和大数据的兴起,很多公司开始倾向于雇用Python技术人员。如果你有一定的Python编程经验并在寻找新的工作机会,那么你需要对一些基本的Python面试题进行深入理解,这些问题涉及Python的许多不同方面,包括语言特性,数据结构,算法和库等。 《面试宝典:深入理解这110道Python面试题》是一本非常好的教材,它包括了面试中常被问到的Python基础知识以及Python在人工智能和大数据中的应用。通过研读这本书,你可以更好地了解Python的基本概念,理解Python的工作原理,并且了解如何在Python中编写高效的代码。 本书内容具有良好实用性,你将会学习到如何使用Python构建各种不同类型的数据结构和算法,并深入了解Python常用的库、算法和数据分析技术。这些知识将有助于你在Python开发时设计更为复杂而高效的应用,提高自己在Python职业中的水平和竞争力。 总之,如果你正在寻找一份Python编程相关的工作,那么你需要认真研读《面试宝典:深入理解这110道Python面试题》这本书,它将有助于您更好地准备Python职业面试并获得您理想的工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的Coder*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值