Spring框架

简介: 【7月更文挑战第24天】

Spring框架中的循环依赖是指两个或多个Spring Bean相互依赖对方,形成一个闭环。Spring支持两种类型的循环依赖:

  1. 构造器循环依赖:发生在Bean的构造器中,Spring容器无法处理这种循环依赖。
  2. 字段注入循环依赖:发生在Bean的字段上,Spring容器可以通过三级缓存处理这种循环依赖。

以下是构造器循环依赖和字段注入循环依赖的示例代码。

构造器循环依赖示例

假设有两个Bean AB,它们在构造器中相互依赖:

public class A {
   
    private B b;

    public A(B b) {
   
        this.b = b;
    }
}

public class B {
   
    private A a;

    public B(A a) {
   
        this.a = a;
    }
}

在Spring配置中:

@Configuration
public class AppConfig {
   
    @Bean
    public A a() {
   
        return new A(b());
    }

    @Bean
    public B b() {
   
        return new B(a());
    }
}

Spring容器在创建AB时,会尝试创建另一个,从而形成循环,这将导致BeanCurrentlyInCreationException异常。

字段注入循环依赖示例

如果AB使用字段注入而不是构造器注入,Spring可以解决循环依赖:

public class A {
   
    private B b;

    @Autowired
    public void setB(B b) {
   
        this.b = b;
    }
}

public class B {
   
    private A a;

    @Autowired
    public void setA(A a) {
   
        this.a = a;
    }
}

在Spring配置中,无需特别配置,Spring会自动处理字段注入的循环依赖:

@Configuration
public class AppConfig {
   
    @Bean
    public A a() {
   
        return new A();
    }

    @Bean
    public B b() {
   
        return new B();
    }
}

在这种情况下,Spring容器会使用一个临时的Bean引用来满足AB的依赖,然后再使用B的完整实例来满足A的依赖,从而打破循环。

目录
相关文章
|
3天前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
59 14
|
4月前
|
XML 安全 Java
|
2月前
|
前端开发 Java 数据库连接
Spring框架初识
Spring 是一个分层的轻量级开源框架,核心功能包括控制反转(IOC)和面向切面编程(AOP)。主要模块有核心容器、Spring 上下文、AOP、DAO、ORM、Web 模块和 MVC 框架。它通过 IOC 将配置与代码分离,简化开发;AOP 提供了声明性事务管理等增强功能。
98 21
Spring框架初识
|
2月前
|
存储 人工智能 开发框架
Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手
第二届开放原子大赛 Spring AI Alibaba 应用框架挑战赛决赛于 2 月 23 日在北京圆满落幕。
|
1月前
|
前端开发 Java 数据库连接
Spring MVC 扩展和SSM框架整合
通过以上步骤,我们可以将Spring MVC扩展并整合到SSM框架中。这个过程包括配置Spring MVC和Spring的核心配置文件,创建控制器、服务层和MyBatis的Mapper接口及映射文件。在实际开发中,可以根据具体业务需求进行进一步的扩展和优化,以构建更加灵活和高效的企业级应用程序。
44 5
|
5月前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
229 0
|
3月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
172 29
|
2月前
|
XML Java 开发者
通过springboot框架创建对象(一)
在Spring Boot中,对象创建依赖于Spring框架的核心特性——控制反转(IoC)和依赖注入(DI)。IoC将对象的创建和管理交由Spring应用上下文负责,开发者只需定义依赖关系。DI通过构造函数、setter方法或字段注入实现依赖对象的传递。Spring Boot的自动配置机制基于类路径和配置文件,自动为应用程序配置Spring容器,简化开发过程。Bean的生命周期包括定义扫描、实例化、依赖注入、初始化和销毁回调,均由Spring容器管理。这些特性提高了开发效率并简化了代码维护。
|
1月前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
3月前
|
开发框架 运维 监控
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。