循环依赖: 循环依赖通常是指两个或多个类相互依赖,而且这种依赖关系形成了一个循环。 Spring解决循环依赖的主要方式包括提前暴露和使用三级缓存机制。提前暴露意味着在对象的创建早期就将对象的引用暴露出去,而不等到整个对象创建完成。三级缓存机制包括singletonFactories、earlySingletonObjects、singletonObjects,通过这些缓存来管理对象的创建过程,避免出现死循环。此外,Spring还可以通过创建代理对象的方式来绕过循环依赖,其中一个 Bean 使用代理,另一个 Bean 使用原始对象。这些机制共同确保 Spring 在处理循环依赖时能够有效地完成对象的创建和注入。
自动装配: Spring Boot 的自动装配是通过条件化装配和自动扫描的机制实现的。 条件化装配通过条件注解(@ConditionalOn...)来控制自动配置的生效,而自动扫描则通过类路径下的 META-INF/spring.factories 文件加载自动配置类。可以通过自定义配置属性覆盖默认的自动配置。Spring Boot的自动装配是为了提供一种“约定优于配置”。通过默认的自动配置,可以迅速搭建起一个应用,而不需要过多的手动配置。