首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
数据库
›
分布式数据库
›
SpringBoot设置RestTemplate并明白单例模式详解 ...
返回列表
发新帖
SpringBoot设置RestTemplate并明白单例模式详解
[复制链接]
发表于 2025-9-22 06:02:40
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
在一样平常开辟中,RestTemplate 是一个非常常用的工具,用来发起HTTP请求。本日我们通过一个小例子,不光学习如安在SpringBoot中设置RestTemplate,还会深入明白
单例模式
在Spring中的现实应用。
1. 示例
代码
我们起首来看一个底子的设置类:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RemoteCallConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
复制
代码
上面这段
代码
非常简单:
@Configuration:表明这是一个设置类,Spring在启动时会扫描并处置惩罚这里界说的Bean。
@Bean:告诉Spring
容器
,将方法返回的对象作为一个Bean举行管理。
终极,RestTemplate就被注册到了Spring
容器
中。
2. Spring
容器
中的单例机制
那么,题目来了:每次调用restTemplate()方法,都会创建一个新的对象吗?
答案是:不会!
在Spring中,
默认情况下,全部注册到容器中的Bean都是单例(Singleton)的
。
**单例(Singleton)**指的是:
在整个应用运行期间,Spring只会创建一个对象实例,后续全部使用的地方都是同一个实例。
在上面的例子中,RemoteCallConfig类中的restTemplate()方法只会被调用
一次
,创建一个RestTemplate对象,后续无论在那里注入这个Bean,得到的都是
同一个对象
。
好比在使用的时间:
@Autowired
private RestTemplate restTemplate1;
@Autowired
private RestTemplate restTemplate2;
复制代码
你会发现:
System.out.println(restTemplate1 == restTemplate2); // 输出 true
复制代码
两次注入的RestTemplate着实是同一个对象,它们的内存所在是一样的。
3. Spring为什么默认使用单例?
使用单例有几个很大的长处:
(1)节流资源
每次new一个对象,都会斲丧内存和CPU。而单例模式只创建一次,大大节流了资源,提拔了
性能
。
(2)方便同一管理
好比我们给RestTemplate设置了同一的超时时间、拦截器等设置。由于它是单例的,全部地方使用时都是划一的,不必要每次都单独设置。
(3)控制对象生命周期
Spring通过单例管理,可以或许更好地控制对象的创建和烧毁,便于资源回收和同一设置。
4. 单例必要注意什么?
固然单例有许多长处,但也有一个必要注意的地方:
假如单例对象内部有可变状态(好比成员变量),就要考虑线程
安全
题目。
由于单例对象是被多个线程共享使用的,假如多个线程同时修改对象内部的变量,大概会造成脏数据或异常举动。
不外,RestTemplate是
线程
安全
的
,所以直接单例使用没有题目。
5. 总结
本文通过一个简单的RestTemplate设置例子,深入讲解了Spring容器中单例模式的应用。
把握这些底子概念,可以让我们在Spring开辟中更加得心应手!
简单总结一句话:
Spring默认全部Bean是单例模式,在应用运行期间,只会创建一次,后续全部注入的都是同一个对象,节流资源,方便管理。
附加:假如想自界说RestTemplate设置怎么办?
好比设置毗连超时时间,可以如许做:
@Bean
public RestTemplate restTemplate() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setConnectTimeout(5000); // 连接超时时间
factory.setReadTimeout(5000); // 读取超时时间
return new RestTemplate(factory);
}
复制代码
如许设置后,整个项目中全部使用到的RestTemplate都会主动应用这些超时时间设置!
✅ 假如你以为这篇文章对你有资助,可以点个赞大概关注我,一起交换学习SpringBoot更多细节哦!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
使用道具
举报
返回列表
一给
+ 我要发帖
×
登录参与点评抽奖,加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表