`

Spring Bean 生命周期 + 循环依赖解决方法

阅读更多

Bean 创建过程


 

自定义的初始化方法

通常通过 @Bean 注解的 initMethod 指定(不推荐XML形式的配置方式)。

 

Bean 销毁过程


 

自定义的销毁方法

类似自定义的初始化方法。
通常通过 @Bean 注解的 destoryMethod 指定(不推荐XML形式的配置方式)。

 

Bean循环依赖解决方法



 

通过构造方法注入依赖 —— 失败

@Service
public class FooServiceImpl implements FooService {
  private BarService barService;

  public FooServiceImpl(BarService barService) {
    this.barService = barService;
  }
  ...
}

@Service
public class BarServiceImpl implements BarService {
  private FooService fooService;

  public BarServiceImpl(FooService fooService) {
    this.fooService = fooService;
  }
  ...
}

 

这种形式下,程序启动时,Spring 会检测到“无法解决”的循环依赖:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

┌─────┐
|  barServiceImpl defined in file [.../BarServiceImpl.class]
↑     ↓
|  fooServiceImpl defined in file [.../FooServiceImpl.class]
└─────┘

 

解决方法:通属性方法注入依赖

Spring 会先创建Bean实例 FooServiceImpl 和 BarServiceImpl,再调用属性方法注入相互依赖。
虽然字段注入的方式也能解决相互依赖,但是字段注入对测试不友好,不是非常推荐。

@Service
public class FooServiceImpl implements FooService {
  private BarService barService;

  @Autowired
  public void setBarService(BarService barService) {
    this.barService = barService;
  }
  ...
}

@Service
public class BarServiceImpl implements BarService {
  private FooService fooService;

  @Autowired
  public void setFooService(FooService fooService) {
    this.fooService = fooService;
  }
  ...
}

 

  • 大小: 59 KB
  • 大小: 18.3 KB
  • 大小: 55.8 KB
分享到:
评论

相关推荐

    Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等).doc

    Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等).doc

    基于spring+springMvc+mybatis 开发的企业门户网站

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程保留核心功能,例如:I0C、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 能学到什么:①工厂模式、策略模式、观察者模式等都是...

    基于spring+springMvc+mybatis 开发的博客样例

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程保留核心功能,例如:I0C、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 能学到什么:①工厂模式、策略模式、观察者模式等都是...

    java面试Spring.pdf

    1. Spring 介绍 1.1 Spring 的优点 1.2 Spring 的缺点 1.3 详细讲解一下核心容器(spring ...Spring如何解决循环依赖问题? Spring的自动装配 Spring框架中都用到了哪些设计模式? Spring框架中有哪些不同类型的事件?

    Java 架构师教程.txt

    │ 2.4 Spring之Bean生命周期源码解析(上).mp4 │ 2.5 Spring之Bean生命周期源码解析(下).mp4 │ 2.6 Spring之依赖注入源码解析(上).mp4 │ 2.7 Spring之依赖注入源码解析(下).mp4 │ 2.8 Spring之循环依赖...

    基于java语言开发的物流配货网

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程保留核心功能,例如:I0C、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 能学到什么:①工厂模式、策略模式、观察者模式等都是...

    高级开发spring面试题和答案.pdf

    spring是如何解决的循环依赖; BeanFactory和FactoryBean有什么区别; Spring中用到的设计模式; SPI 机制(Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制), 很多地方有用到: AOP ...

    动力节点老杜最新版Spring6框架教程学习资料分享

    本套Spring教程基于...第十一点:Bean生命周期10步讲解法,其他视频最多讲7步。 通过本套教程的学习,可以让你不仅会使用Spring框架,还会让你精通框架底层原理。无论面试也好,实际开发也好,都会有极大的帮助。

    蓝色简约风毕业答辩PPT

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 ...

    Spring常见面试题(35道)

    Spring特性、包含哪些模块、用到的设计模式,IOC,AOP,循环依赖问题,为什么用三级缓存,自动装配的方式,Spring Bean的生命周期,Spring启动阶段流程,Spring事务种类,声明式事务实现原理,SpringMVC 核心组件、...

    软件工程课堂笔记+期末试题

    在手写Spring源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 能学...

    SSM+课程设计+项目源代码+thymleaf

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 ...

    【大厂面试题】SSM框架面试题合集及其答案

    谈谈Springbean的生命周期,作用域 Mybatis中Dao接口的工作原理 SpringlOC和SpringAOP的实现原理(源码主线流程) Spring的并发问题-有状态Bean和无状态Beanmd Spring中的循环依赖解决详解 springmvc和mybatis的工作...

    后端开发+SSM+图书管理系统+附带有项目报告

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 ...

    【基于java-ssm】大学生兼职论坛管理系统实现源码+lw+部署文档+讲解

    在实现过程中,将提炼出 Spring 框架的核心逻辑,简化代码实现过程,保留重要功能,例如:IOC(控制反转)、AOP(面向切面编程)、Bean 生命周期管理、应用上下文、作用域、资源处理等内容。 适合人群:具备一定...

    SSM+人事管理系统+后台作业项目+附带有项目报告

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 ...

    该项目是gradle+springboot+freemarker的项目,是对学生基本信息的增删改查。

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 ...

    动力节点SSM课件源码分析教程配套资料分享

    SSM源码分析课程简介: ...Spring Bean的生命周期,Spring循环依赖等等问题。课程讲解细致,一行一行带你读懂代码,一行一行调试源码,彻彻底底明明白白真正理解MyBatis、Spring、SpringMVC框架的核心实现源码;

    Video基础知识简介

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 ...

Global site tag (gtag.js) - Google Analytics