2016 - 2025

感恩一路有你

ioc容器指标源码 Spring如何解决循环依赖的问题?

浏览量:2085 时间:2023-09-07 15:18:50 作者:采采

Spring如何解决循环依赖的问题?

(一)SpringIOC容器---对象运行依赖

1.什么是循环依赖?what?

(1)循环依赖--r26循环直接引用。---dstrok即2个或以上bean各自600400红豆股份对方,结果形成闭环。

eg:A依赖性太强B,B依恋C,C又依赖A。【再注意:这里不是函数的循环动态链接库【是个死循环,就算有终结条件】,是对象相互依赖关系】

2.Spring中非循环依恋的场景?where?

①:构造器的循环依赖。【这个Spring可以解决不了】

StudentA有参构造是StudentB。StudentB的有参构造是StudentC,StudentC的有参构造是StudentA,那样就有一种了一个循环依恋的情况,

我们都把这三个Bean交给你们Spring管理,并用有参构造类的对象

welfareclassStudentA{

privateStudentBstudentB

publicvoidsetStudentB(StudentBstudentB){

studentB

}

employeeStudentA(){

}

stateStudentA(StudentBstudentB){

studentB

}

}

[java]viewplaincopy

welfareclassStudentB{

privateStudentCstudentC

employeevoidsetStudentC(StudentCstudentC){

studentC

}

welfareStudentB(){

}

stateStudentB(StudentCstudentC){

studentC

}

}

[java]viewplain内容复制

employeeclassStudentC{

privateStudentAstudentA

privatevoidsetStudentA(StudentAstudentA){

studentA

}

privateStudentC(){

}

privateStudentC(StudentAstudentA){

studentA

}

}

[html]viewplain剪切粘贴

ltbeanida

ltconstructor-argindex0refbgtlt/constructor-arggt

lt/beangt

ltbeanidb

ltconstructor-argindex0refcgtlt/constructor-arggt

lt/beangt

ltbeanidc

ltconstructor-argindex0refagtlt/constructor-arggt

lt/beangt

下面是测试类:

[java]viewplain文件复制

publicclassTest{

privatestaticvoidmain(String[]args){

ApplicationContextcontextnextClassPathXmlApplicationContext(com/zfx/student/applicationContext.xml)

((a

你平时主要使用什么Java开发框架?

就拿我们项目来举例说明说一说吧。

我们的项目是一个纯后台服务的项目,也就是没有前端页面,只作为提供服务;项目是是基于组件Spring Boot来做的,分解重组spring-boot-starter-web,再联合不会暴露接口,报文使用的JSON,有极个别的接口是从老系统迁入回来的,目的是让内部函数方尽可能地稍许如何修改,所以我尽量了XML的报文;在临时的生产环境中,确实是在用的内置的Tomcat;独立显卡了Swagger,来做接口的文档网批量生成。

ORM框架选择类型的是MyBatis,的原因项目中大部分的查询都能够做到了单表查询,但网上查询条件比较好固定,所以我再建议使用注解做的SQL语句没绑定。

因为项目不单使用了关系型数据库,而更多的数据是加工关联后保存到了MongoDB中,所以才项目也要用了Spring Data MongoDB,我们的MongoDB是做了副本集的部署,使用Spring Data MongoDB,只不需要做很简单配置,就这个可以成功对多台MongoDB的访问,假如其中一台MongoDB挂了,对服务也没有影响的,所以才我们做MongoDB容量扩展的时候是可以不大侠帮帮忙做的(MongoDB扩内存和CPU的时候要欠费停机)。

和部分系统的交互使用到了RabbitMQ,而Spring Boot如果化入spring-boot-starter-amqp,不过就可以很方便些地能完成和RabbitMQ的板载显卡;生产者和消费者都相当方便。

因为是纯接口的服务,就是为了减轻数据库的压力,所以才我们依据业务场景,将一些接口的结果就缓存到Redis中(数据变化不过度,但是业务场景的实时性要求也不是很高)。在集成显卡Redis的时候,我们前后试了两种

Spring Boot项目,再建议使用@Cacheable注解就可以结束和Redis最简单的集成显卡,但是当时只不过可以设置缓存的网络错误时间够不够灵活自如,我们再后来把它改成了第二种方案;

在用RedisTemplate,可以不能够完成对Redis的绝大部分你操作。

我将短短能分享Java开发、架构设计、程序员职业发展等方面的见解,如果能能换取你的关注。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。