温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
里mvc Jackson jpa都能直接跑起来,但代码里几乎没写这些病。只加一个starter,容器里怎么突然多出几十个B?关键在X spring application里的at enable auto configuration, 它会根据plus配置和也有并批量加载候选自动配置类。那他怎么知道该配data source还是GPA?难道所有候选配置都会无条件生效吗?不会。每个auto configuration上都挂着conditional注解,比如有驱动类才配数据源,有实体管理器才配GPA。用低报的启动或者看conditions evaluation report, 能直接看到哪些自动配置,哪些没生效。我自己定义一个data source spin boot, 会不会重复配置?不会。自动配置通常带at conditional on missing病,发现你已定义同类病,就会主动back off让位给用户配置。
01:05
这个回退不是随机的,报告里会写明backoff原因,方便排查哪些默认配置被你的病顶掉了。能不能从源码确认一条完整链路,比如class path怎么触发条件,条件怎么决定配置类,配置类怎么产出病?可以从spring auto configu的spring factories或auto configuration imports进入,找到对应配置类在追条件注解和并方法。最小落地就是加一个starter,跑一次debug,看报告里新增的match项,再定义一个同名病,观察back off.所以boot的核心不是魔法,而是根据class path配置和用户,并自动做默认工程决策。看懂这条链路,容器里多出的几十个B就不再神秘。
我来说两句