生产项目中基于springboot项目解决循环依赖的三种方式

这篇具有很好参考价值的文章主要介绍了生产项目中基于springboot项目解决循环依赖的三种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、springboot项目如何解决循环依赖

在生产项目中,可以使用Spring Boot框架来快速开发Spring应用程序。Spring Boot提供了一种方便的方式来创建独立的,基于Spring的应用程序,并且有着高度的自动化配置和开箱即用的特性。

可以使用@Lazy注解来控制Bean的延迟初始化,同时可以使用AOP切面编程来解决循环依赖问题。具体步骤如下:

1.1、添加@Lazy注解

在需要延迟初始化的Bean上添加@Lazy注解,使其在容器启动时不会实例化。

@Service
@Lazy
public class UserService {
    @Autowired
    private UserController userController;
    // ...
}

1.2、使用@DependsOn,指定加载的顺序

在依赖被初始化前需要注入的Bean上使用@DependsOn注解来指定Bean之间的依赖顺序。

@RestController
@DependsOn("userService")
public class UserController {
    @Autowired
    private UserService userService;
    // ...
}

1.3、 使用AOP来实现Bean的代理

使用Spring AOP来实现Bean的代理、懒加载,从而避免循环依赖导致的问题。其中,当被代理的Bean被调用时,Spring会先检查是否已经创建了该Bean的代理对象,如果存在,则直接返回代理对象,否则再进行实例化并返回。

@Component
@Aspect
public class LazyInitAspect {
    private Map<String, Object> singletonObjects = new ConcurrentHashMap<>();

    @Around("@annotation(org.springframework.context.annotation.Lazy)")
    public Object lazyInit(ProceedingJoinPoint joinPoint) throws Throwable {
        String beanName = joinPoint.getSignature().getDeclaringType().getSimpleName();
        Object singletonObject = singletonObjects.get(beanName);
        if (singletonObject != null) {
            return singletonObject;
        }
        synchronized (this.singletonObjects) {
            singletonObject = singletonObjects.get(beanName);
            if (singletonObject == null) {
                singletonObject = joinPoint.proceed();
                singletonObjects.put(beanName, singletonObject);
            }
            return singletonObject;
        }
    }
}

以上是基于Spring Boot项目使用@Lazy和AOP解决循环依赖问题的一种方式。需要注意的是,循环依赖会导致Bean的初始化顺序变得复杂,因此在设计应用程序时需要避免过度的复杂性。文章来源地址https://www.toymoban.com/news/detail-501258.html

到了这里,关于生产项目中基于springboot项目解决循环依赖的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot循环依赖

    2024年02月10日
    浏览(39)
  • springboot升级出现循环依赖问题

    问题从spring boot 2.3.12升级到2.6.15版本后,项目启动后访问报错. The dependencies of some of the beans in the application context form a cycle. serviceCollectionIdCacheService ┌─────┐ | serviceProductInfoProviderImpl ↑ ↓ | serviceOfflineProviderImpl ↑ ↓ | serviceProductMappingProviderImpl └─────┘ Relying

    2024年02月15日
    浏览(33)
  • SpringBoot中循环依赖报错解决---The dependencies of some of the beans in the application context form a cycle

    循环依赖: 循环依赖就是循环引用,也就是两个或则两个以上的bean互相依赖对方,形成闭环。比如A类中有B属性,B类中有A属性 一、报错信息 The dependencies of some of the beans in the application context form a cycle:  二、解决方案 1、修改配置文件 根据Action中的提示 不鼓励依赖循环引用

    2024年02月11日
    浏览(98)
  • 解决IDEA新建springboot项目时不能导入maven依赖(右边没有maven窗口)

    1.问题:今天在github上找了一个springboot项目,但是用idea打开后发现不能导入maven依赖,并且在IDEA右边也没有出现maven窗口,如下图  2.解决方法:右键点击pom.xml文件,然后点击“Add as Maven Project”即可  此时发现右边出现maven,然后在pom.xml中重新加载maven依赖即可  

    2024年02月14日
    浏览(44)
  • 关于SpringBoot中出现的循环依赖问题

    环境: SpringBoot2.7.8 背景: 在增加出库订单时需要对物品表的的数量进行修改 因此我在OutboundController中创建了几个公共方法,并将其注入到Spring中,结果给我报了这一串错误。 Description: The dependencies of some of the beans in the application context form a cycle: ┌──-──┐ | getGoodsNumber defi

    2024年02月11日
    浏览(71)
  • SpringBoot项目报错:org.springframework.beans.factory.UnsatisfiedDependencyException依赖注入异常(已解决)

           目录 报错信息 可能原因 结论         最近在学Spring Boot,今天在做Spring Boot + Mybatis Plus + Vue项目时启动后端报错:         先看报错信息,说出现了一个 依赖注入异常(UnsatisfiedDependencyException) ,在创建名为 \\\'loginController\\\' 的bean时出错,并且问题出现在字段 \\\'

    2024年02月11日
    浏览(35)
  • Springboot依赖注入Bean的三种方式,final+构造器注入Bean

    @Autowired注解的一大使用场景就是Field Injection。 通过Java的反射机制实现,所以private的成员也可以被注入具体的对象 优点 代码少,简洁明了。 新增依赖十分方便,不需要修改原有代码 缺点 容易出现空指针异常。Field 注入允许构建对象实例时依赖的对象为空,导致空指针异常

    2024年02月02日
    浏览(37)
  • spring 的循环依赖以及spring为什么要用三级缓存解决循环依赖

            bean的生命周期         这里简单过一下 class -无参构造 -普通对象 -依赖注入(对加了autowire等的属性赋值) -初始化前-初始化 -初始化后(aop) -放入单例池的map(一级缓存) -bean对象 这里提一点单例bean单例bean 其实就是用mapbeanName,Bean对象创建的,多例bean就不

    2024年02月15日
    浏览(40)
  • Spring解决循环依赖

    目录 什么是spring循环依赖 什么情况下循环依赖可以被处理? spring 如何解决循环依赖 创建A这个Bean的流程 答疑 疑问:在给B注入的时候为什么要注入一个代理对象? 初始化的时候是对A对象本身进行初始化,而容器中以及注入到B中的都是代理对象,这样不会有问题吗? 三级

    2024年02月22日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包