首页 > 其他分享 >Spring:通过@Lazy解决构造方法形式的循环依赖问题

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

时间:2023-10-19 12:03:08浏览次数:44  
标签:Lazy 构造方法 Spring edu System springframework org import public


一、定义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解决构造方法形式的循环依赖问题_java


标签:Lazy,构造方法,Spring,edu,System,springframework,org,import,public
From: https://blog.51cto.com/amadeusliu/7934150

相关文章

  • SpringBoot:手动注册bean
    packagecn.edu.tju.config;importcn.edu.tju.domain.Car;importorg.springframework.beans.BeansException;importorg.springframework.beans.factory.config.ConfigurableListableBeanFactory;importorg.springframework.beans.factory.support.BeanDefinitionRegi......
  • SaaS云平台 springboot智慧校园管理平台源码
    智慧校园以互联网为基础,以“大数据+云服务”为核心,融合校园教学、管理、生活软硬件平台,定义智慧校园新生活。智慧校园管理平台管理者、教师、学生、家长提供一站式智慧校园解决方案,实现校园管理智能化.校园生活一体化、校园设施数字化、课堂教学生动化、家校沟通无缝化。系统架构:Ja......
  • 若依springboot 使用MultipartFile 为空
    解决:接口请求参数需要加个入参:@RequestParam("file")代码: postman ......
  • 实现Springboot中MyBatisplus使用分页“@P0”附近有语法错误selectPage, IPage和Page分
    说明:QueryWrapper<Banner> warapper=newQueryWrapper<>();Page<Banner>page=newPage<>(1,1);IPage<Banner>iPage=bannerMapper.selectPage(page,warapper);输出结果还是全部的,没有limit效果。 解决:查了一天发现网上有说,没有进行配置分页插件,加上这个分页插件配置类......
  • [spring-mvc.xml] cannot be opened because it does not exist
    IOExceptionparsingXMLdocumentfromclasspathresource[spring-mvc.xml];nestedexceptionisjava.io.FileNotFoundException:classpathresource[spring-mvc.xml]cannotbeopenedbecauseitdoesnotexist检查pom.xml文件:<packaging>war</packagin......
  • SpringBoot项目中使用mybatis逆向工程
    mybatis逆向工程,即利用现有的数据表结构,生成对应的model实体类、dao层接口,以及对应的mapper.xml映射文件。借助mybatis逆向工程,我们无需手动去创建这些文件。下面是使用Java代码的方式来实现逆向工程,生成文件(也可以使用插件来生成):首先,导入需要的依赖包:mybatis逆向工程的依赖和......
  • Swagger系列:SpringBoot3.x中使用Knife4j
    目录一、简介二、版本说明三、使用四、效果图一、简介官网:https://doc.xiaominfo.com/Knife4j是一个集Swagger2和OpenAPI3为一体的增强解决方案Knife4j是为JavaMVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,致力于springfox-swagger......
  • Spring源码解析——事务的回滚和提交
    正文上一篇文章讲解了获取事务,并且通过获取的connection设置只读、隔离级别等,这篇文章讲解剩下的事务的回滚和提交。最全面的Java面试网站回滚处理之前已经完成了目标方法运行前的事务准备工作,而这些准备工作最大的目的无非是对于程序没有按照我们期待的那样进行,也就是出现特定......
  • GraalVM进行spring boot的native编译报错 “returned non-zero result”解决方法
    使用GraalVM对springboot工程进行native编译:系统:CentosJDK:GraalVMJDK21报错:Ifyouareunabletoresolvethisproblem,pleasefileanissuewiththeerrorreportat:https://graalvm.org/support[INFO]---------------------------------------------------------......
  • SpringBoot 04 shiro数据认证及登录
     实体类@Data@AllArgsConstructor@NoArgsConstructor@TableName("t_user")publicclassRUser{@TableId(value="usr_id",type=IdType.AUTO)privateIntegerusrId;privateStringusrName;privateStringusrAccount;pr......