Skip to content

Commit

Permalink
Add "ConfigurationProperties 一定要搭配 EnableConfigurationProperties 使用吗"
Browse files Browse the repository at this point in the history
 And update 2 posts
  • Loading branch information
moralok committed Dec 10, 2023
1 parent 8b5f90d commit 46af853
Show file tree
Hide file tree
Showing 3 changed files with 396 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: Spring Boot 自定义 starter 和自动配置的工作原理
date: 2023-12-06 08:02:11
tags: [spring, spring boot, auto configuration]
tags: [java, spring, spring boot, auto configuration]
---

如果你正在参与一个共享库的开发,你可能会想为使用方提供自动配置的支持,以帮助对方快速地接入和使用。自动配置机制往往和 `starter` 联系在一起,本文将介绍如何创建一个自定义的 `starter` 并从源码角度分析 `Spring Boot` 自动配置的工作原理。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ public static boolean needsRefresh(InjectionMetadata metadata, Class<?> clazz) {

构建自动装配元数据只需要给定一个 `Class`,沿着给定的 `Class` 的父类向上循环查找直到 `Object` 类。在每个循环中,先遍历当前类声明的所有属性,找到标注了自动装配注解的属性,为其创建 `AutowiredFieldElement` 并添加到临时集合,再遍历当前类声明的所有方法,找到标注了自动装配注解的方法,为其创建 `AutowiredMethodElement` 并添加到临时集合。最后汇总 `InjectedElement` 封装到 `InjectionMetadata` 中。

> 这个处理顺序意味着在注入时方法的优先级高于字段,前者会覆盖后者。
```java
private InjectionMetadata buildAutowiringMetadata(final Class<?> clazz) {
LinkedList<InjectionMetadata.InjectedElement> elements = new LinkedList<InjectionMetadata.InjectedElement>();
Expand Down Expand Up @@ -662,4 +664,6 @@ public void checkConfigMembers(RootBeanDefinition beanDefinition) {
}
```

> 如果不了解具体的场景,可能会比较难想象这个标记的用处是什么。
> 如果不了解具体的场景,可能会比较难想象这个标记的用处是什么。
> 尽管 `@Autowired` 注解配合 `@Value` 注解可以很灵活,但是应尽量采取清晰明了的配置方式,让注入的结果一眼就能看出来。
Loading

0 comments on commit 46af853

Please sign in to comment.