Spring通过@Lazy解决构造方法形式的循环依赖问题

 更新时间:2023年10月06日 09:32:56   作者:amadeus_liu2  
这篇文章主要给大家介绍了Spring如何通过@Lazy解决构造方法形式的循环依赖问题,文中有详细的代码示例,对大家的学习活工作有一定的帮助,具有一定的参考价值,需要的朋友可以参考下

一、定义2个循环依赖的类

package cn.edu.tju.domain2;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component
public class A  {
    private final B b;
    public B getB() {
        return b;
    }
    @Lazy
    public A(B b){
        this.b = b;
        //System.out.println(b);
    }
}
package cn.edu.tju.domain2;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component
public class B {
    private final A a;
    public A getA() {
        return a;
    }
    @Lazy
    public B(A a){
        this.a =a;
        //System.out.println(a);
    }
}

二、定义配置文件(spring09.xml):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="cn.edu.tju.domain2"/>
</beans>

三、定义测试类:

package cn.edu.tju;
import cn.edu.tju.domain.Husband;
import cn.edu.tju.domain2.A;
import cn.edu.tju.domain2.B;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.sql.SQLException;
public class Test09 {
    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext("spring09.xml");
         A a = ctx.getBean("a", A.class);
         B b = ctx.getBean("b", B.class);
        System.out.println(a.getClass().getName());
        System.out.println(a.getB().getA() == a);
        System.out.println(a.getB().getClass().getName());
        System.out.println(b.getA().getClass().getName());
    }
}

四、执行结果:

以上就是Spring通过@Lazy解决构造方法形式的循环依赖问题的详细内容,更多关于Spring @Lazy解决循环依赖的资料请关注脚本之家其它相关文章!

相关文章

  • Java动态脚本Groovy获取Bean技巧

    Java动态脚本Groovy获取Bean技巧

    这篇文章主要给大家分享的是Java动态脚本Groovy获取Bean技巧,在Java代码中当我们需要一个Bean对象,通常会使用spring中@Autowired注解,用来自动装配对象。下面我们一起进入文章学习个表格多 详细内容吧

    2021-12-12
  • intellij idea的快速配置使用详细教程

    intellij idea的快速配置使用详细教程

    这篇文章主要介绍了intellij idea的快速配置使用详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot整合RedisTemplate实现缓存信息监控的步骤

    SpringBoot整合RedisTemplate实现缓存信息监控的步骤

    这篇文章主要介绍了SpringBoot整合RedisTemplate实现缓存信息监控,一步一步的实现 Springboot 整合 Redis 来存储数据,读取数据,需要的朋友可以参考下
    2022-01-01
  • Java毕业设计实战之教室预订管理系统的实现

    Java毕业设计实战之教室预订管理系统的实现

    这是一个使用了java+SpringBoot+Maven+Vue+mysql开发的教室预订管理系统,是一个毕业设计的实战练习,具有教室预订管理该有的所有功能,感兴趣的朋友快来看看吧
    2022-02-02
  • 详解SpringBoot启动项目后执行方法的几种方式

    详解SpringBoot启动项目后执行方法的几种方式

    在项目开发中某些场景必须要用到启动项目后立即执行方式的功能,本文主要聊聊实现立即执行的几种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Java线程状态运行原理解析

    Java线程状态运行原理解析

    这篇文章主要介绍了Java线程状态运行原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 浅析Spring IOC bean为什么默认是单例

    浅析Spring IOC bean为什么默认是单例

    单例的意思就是说在 Spring IoC 容器中只会存在一个 bean 的实例,无论一次调用还是多次调用,始终指向的都是同一个 bean 对象,本文小编将和大家一起分析Spring IOC bean为什么默认是单例,需要的朋友可以参考下
    2023-12-12
  • Spring集成Redis详解代码示例

    Spring集成Redis详解代码示例

    这篇文章主要介绍了Spring集成Redis详解代码示例,介绍了Eclipse工程结构,POM依赖,Spring配置,Redis配置信息以及Java代码等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot中的Spring Cloud Hystrix原理和用法详解

    SpringBoot中的Spring Cloud Hystrix原理和用法详解

    在Spring Cloud中,Hystrix是一个非常重要的组件,Hystrix可以帮助我们构建具有韧性的分布式系统,保证系统的可用性和稳定性,在本文中,我们将介绍SpringBoot中的Hystrix,包括其原理和如何使用,需要的朋友可以参考下
    2023-07-07
  • Java编写掷骰子游戏

    Java编写掷骰子游戏

    这篇文章主要介绍了Java编写掷骰子游戏,需要的朋友可以参考下
    2015-11-11

最新评论