老铁们,大家好,相信还有很多朋友对于spring怎么处理环形依赖和spring不建议循环依赖的相关问题不太懂,没关系,今天就由我来为大家分享分享spring怎么处理环形依赖以及spring不建议循环依赖的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
本文目录
spring mvc依赖注入是单例的吗
springmvc依赖注入一般不是单例,是多例,只有这样controller类中的非静态变量才能保证是线程安全的,但是在默认状态下,springmvc根据以下两点1、为了性能。2、不需要多例,默认单例。
另外,springmvc通过@Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)可成为多例模式,或者写成@Scope("prototype")。
在此再重复一次,单例模式下定义成员变量是线程不安全的。
使用单例模式是为了性能(无需频繁初始化),同时,也没有必要使用多例模式。
如何在Maven中配置Spring依赖
Spring是一个轻量级的DI/IoC和AOP容器的开源框架,提倡以“最少侵入”的方式来管理应用中的代码,框架结构如下图:
添加Spring依赖主要包括4个方面:
(1)spring核心依赖(基础配置)
spring-core、spring-beans、spring-context
其中spring-context实现了Spring注入容器并且依赖:spring-core,spring-expression,spring-aop以及spring-beans
(2)springdao依赖(提供JDBCTemplate)
spring-jdbc、spring-tx
(3)springweb依赖(配置SpringMVC)
spring-web、spring-webmvc
(a)spring-web包包含Servlet和Portlet所需要通用,spring-webmvc则在Servlet环境中启用MVC支持。
(b)由于spring-webmvc依赖于spring-web,所以定义了spring-webmvc依赖后,可以不用显示的在pom定义spring-web。
(4)springtest依赖
spring-test
从Spring3.2开始,SpringMVCTest项目已经被包含到核心的SpringTest中。所以,从Spring3.2开始,仅需要在依赖配置中配置spring-test依赖即可
代码如下:
<!--Spring依赖-->
<!--1.Spring核心依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--2.Springdao依赖-->
<!--spring-jdbc包括了一些如jdbcTemplate的工具类-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--3.Springweb依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--4.Springtest依赖:方便做单元测试和集成测试-->
<dependency>
<groupId>org.springframework</g
spring怎么处理环形依赖
Spring解决循环依赖的诀窍就在于singletonFactories这个三级cache。这个cache的类型是ObjectFactory。这里就是解决循环依赖的关键,发生在createBeanInstance之后,也就是说单例对象此时已经被创建出来(调用了构造器)。
这个对象已经被生产出来了,虽然还不完美(还没有进行初始化的第二步和第三步),但是已经能被人认出来了(根据对象引用能定位到堆中的对象),所以Spring此时将这个对象提前曝光出来让大家认识,让大家使用。
如果你还想了解更多这方面的信息,记得收藏关注本站。