爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      吃透 Spring IoC

      首页 知识中心 软件开发 文章详情页

      吃透 Spring IoC

      2024-10-21 09:43:21 阅读次数:29

      bean,IoC,Spring

      初识 IoC

      IoC - Inversion of Control, 控制反转。

      控制反转就是把创建和管理 bean 的过程转移给了第三方。而这个第三方,就是 Spring IoC Container,对于 IoC 来说,最重要的就是容器。

      容器负责创建、配置和管理 bean,也就是它管理着 bean 的生命,控制着 bean 的依赖注入。

      通俗点讲,因为项目中每次创建对象是很麻烦的,所以我们使用 Spring IoC 容器来管理这些对象,需要的时候你就直接用,不用管它是怎么来的、什么时候要销毁,只管用就好了。

      举个例子,就好像父母没时间管孩子,就把小朋友交给托管所,就安心的去上班而不用管孩子了。托儿所,就是第三方容器,负责管理小朋友的吃喝玩乐;父母,相当于程序员,只管接送孩子,不用管他们吃喝。

      等下,bean 又是什么?

      Bean 其实就是包装了的 Object,无论是控制反转还是依赖注入,它们的主语都是 object,而 bean 就是由第三方包装好了的 object。(想一下别人送礼物给你的时候都是要包装一下的,自己造的就免了。

      Bean 是 Spring 的主角,有种说法叫 Spring 就是面向 bean 的编程(Bean Oriented Programming, BOP)。

      IoC 容器

      既然说容器是 IoC 最重要的部分,那么 Spring 如何设计容器的呢?还是回到官网,第二段有介绍哦:

      吃透 Spring IoC

      答:使用 ApplicationContext,它是 BeanFactory 的子类,更好的补充并实现了 BeanFactory 的。

      BeanFactory 简单粗暴,可以理解为 HashMap:

      • Key - bean name
      • Value - bean object

      但它一般只有 get, put 两个功能,所以称之为“低级容器”。

      而 ApplicationContext 多了很多功能,因为它继承了多个接口,可称之为“高级容器”。在下文的搭建项目中,我们会使用它。

      吃透 Spring IoC

      ApplicationContext 的里面有两个具体的实现子类,用来读取配置配件的:

      • ClassPathXmlApplicationContext - 从 class path 中加载配置文件,更常用一些;
      • FileSystemXmlApplicationContext - 从本地文件中加载配置文件,不是很常用,如果再到 Linux 环境中,还要改路径,不是很方便。

      当我们点开 ClassPathXmlApplicationContext 时,发现它并不是直接继承 ApplicationContext 的,它有很多层的依赖关系,每层的子类都是对父类的补充实现。

      而再往上找,发现最上层的 class 回到了 BeanFactory,所以它非常重要。

      要注意,Spring 中还有个 FactoryBean,两者并没有特别的关系,只是名字比较接近,所以不要弄混了顺序。

      为了好理解 IoC,我们先来回顾一下不用 IoC 时写代码的过程。

      深入理解 IoC

      这里用经典 class Rectangle 来举例:

      • 两个变量:长和宽
      • 自动生成 set() 方法和 toString() 方法

      注意 ⚠️:一定要生成 set() 方法,因为 Spring IoC 就是通过这个 set() 方法注入的;toString() 方法是为了我们方便打印查看。

      public class Rectangle {
          private int width;
          private int length;
      
          public Rectangle() {
              System.out.println("Hello World!");
          }
      
      
          public void setWidth(int widTth) {
              this.width = widTth;
          }
      
          public void setLength(int length) {
              this.length = length;
          }
      
          @Override
          public String toString() {
              return "Rectangle{" +
                      "width=" + width +
                      ", length=" + length +
                      '}';
          }
      }

      然后在 test 文件中手动用 set() 方法给变量赋值。

      嗯,其实这个就是「解藕」的过程!

      public class MyTest {
        @Test
        public void myTest() {
          Rectangle rect = new Rectangle();
          rect.setLength(2);
          rect.setWidth(3);
          System.out.println(rect);
        }
      }

      其实这就是 IoC 给属性赋值的实现方法,我们把「创建对象的过程」转移给了 set() 方法,而不是靠自己去 new,就不是自己创建的了。

      这里我所说的“自己创建”,指的是直接在对象内部来 new,是程序主动创建对象的正向的过程;这里使用 set() 方法,是别人(test)给我的;而 IoC 是用它的容器来创建、管理这些对象的,其实也是用的这个 set() 方法,不信,你把这个这个方法去掉或者改个名字试试?

      几个关键问题:

      何为控制,控制的是什么?

      答:是 bean 的创建、管理的权利,控制 bean 的整个生命周期。

      何为反转,反转了什么?

      答:把这个权利交给了 Spring 容器,而不是自己去控制,就是反转。由之前的自己主动创建对象,变成现在被动接收别人给我们的对象的过程,这就是反转。

      举个生活中的例子,主动投资和被动投资。

      自己炒股、选股票的人就是主动投资,主动权掌握在自己的手中;而买基金的人就是被动投资,把主动权交给了基金经理,除非你把这个基金卖了,否则具体选哪些投资产品都是基金经理决定的。

      依赖注入

      回到文档中,第二句话它说:IoC is also known as DI.

      我们来谈谈 dependency injection - 依赖注入。

      何为依赖,依赖什么?

      程序运行需要依赖外部的资源,提供程序内对象的所需要的数据、资源。

      何为注入,注入什么?

      配置文件把资源从外部注入到内部,容器加载了外部的文件、对象、数据,然后把这些资源注入给程序内的对象,维护了程序内外对象之间的依赖关系。

      所以说,控制反转是通过依赖注入实现的。但是你品,你细品,它们是有差别的,像是「从不同角度描述的同一件事」:

      • IoC 是设计思想,DI 是具体的实现方式;
      • IoC 是理论,DI 是实践;

      从而实现对象之间的解藕。

      当然,IoC 也可以通过其他的方式来实现,而 DI 只是 Spring 的选择。

      IoC 和 DI 也并非 Spring 框架提出来的,Spring 只是应用了这个设计思想和理念到自己的框架里去。

      为什么要使用IoC

      那么为什么要用 IoC 这种思想呢?换句话说,IoC 能给我们带来什么好处?

      答:解藕。

      它把对象之间的依赖关系转成用配置文件来管理,由 Spring IoC Container 来管理。

      在项目中,底层的实现都是由很多个对象组成的,对象之间彼此合作实现项目的业务逻辑。但是,很多很多对象紧密结合在一起,一旦有一方出问题了,必然会对其他对象有所影响,所以才有了解藕的这种设计思想。

      吃透 Spring IoC

      吃透 Spring IoC

      如上图所示,本来 ABCD 是互相关联在一起的,当加入第三方容器的管理之后,每个对象都和第三方法的 IoC 容器关联,彼此之间不再直接联系在一起了,没有了耦合关系,全部对象都交由容器来控制,降低了这些对象的亲密度,就叫“解藕”。

      如何使用IOC

      最后到了实践部分,我们来真的搭建一个 Spring 项目,使用下 IoC 感受一下。

      现在大都使用 maven 来构建项目,方便我们管理 jar 包;但我这里先讲一下手动导入 jar 包的过程,中间会遇到很多问题,都是很好的学习机会。

      在开始之前,我们先来看下图 - 大名鼎鼎的 Spring 模块图。

      Spring Framework 八大模块

      吃透 Spring IoC

      模块化的思想是 Spring 中非常重要的思想。

      Spring 框架是一个分层架构,每个模块既可以单独使用,又可与其他模块联合使用。

      每个「绿框」,对应一个模块,总共8个模块;「黑色包」,表示要实现这个模块的 jar 包。

      Core Container,我们刚才已经在文档里看到过了,就是 IoC 容器,是核心,可以看到它依赖于这4个 jar 包:

      • Beans
      • Core
      • Context
      • SpEL, spring express language

      那这里我们就知道了,如果想要用 IoC 这个功能,需要把这 4个 jar 包导进去。其中,Core 模块是 Spring 的核心,Spring 的所有功能都依赖于这个 jar 包,Core 主要是实现 IoC 功能,那么说白了 Spring 的所有功能都是借助于 IoC 实现的。

      其他的模块和本文关系不大,不在这里展开了。

      那当我们想搭建 Spring 项目时,当然可以把所有 jar 包都导进去,但是你的电脑能受得了吗。。 但是包越大,项目越大,问题就越多,所以尽量按需选择,不用囤货。。

      Btw, 这张图在网上有很多,但是在我却没有在最新版的 reference doc 上找到。。不过,既然那些老的教程里有,说明老版本的 doc 里有,那去老版本的介绍[3] 里找找看

      在本文第一张图 Spring Framework - Documentation 中我们选 4.3.26 的 Reference Doc.,然后搜索“Framework Modules”,就有啦~ 具体链接可以看文末参考资料。

      还有一个方法,待会我们讲到 jar 包中的内容时再说。

      搭建 Spring 项目

      知道要导入哪些 jar 包了,那就找吧。

      手动加载 jar 包的方式

      下载地址:

      吃透 Spring IoC

      如果你要问我怎么找的,那就还是从刚才 4.3.26 版本的 Reference Doc 中进去,然后刚开头就有一个 Distribution Zip Files,

      吃透 Spring IoC

      好奇心带着我打开了它,发现...

      吃透 Spring IoC

      发现了仓库地址!

      打开后发现是各个版本的 jar 包啊~

      我们搜 5.2.3 版的,它在最下面:

      吃透 Spring IoC

      然后就可以愉快的使用了~

      • Dist.zip 是 jar 包
      • Docs.zip 是文档

      其他的暂时先不用管~

      下载好了之后,就好好看看 Spring 送我们的这份大礼包吧。

      此处回答上文的遗留问题:哪里找 Spring Framework 框架图。

      答案是:下载的 docs.zip → spring-framework-reference → images → spring-overview

      吃透 Spring IoC

      我们需要导入 Intellij 的 jar 包在哪里呢?Dist.zip → libs

      吃透 Spring IoC

      这里可以看到,每个黑色框对应3个 jar 包,我们要导入 Intellij 的是 RELEASE.jar.

      我们 new project,就新建一个普通的 Java 项目,比如我就叫它 Spring_HelloWorld,然后还是用我常用的 class Rectangle 的例子。

      然后在 External Libraries 中导入我们刚才在模块图里看到的那4个模块所对应的 jar 包,结构如下:

      吃透 Spring IoC

      这样你以为就大功告成了吗?Too young too simple 啊~

      来运行一下:

      吃透 Spring IoC

      出现了老盆友:no class def found error, 就是找不到这个类。

      我们谷歌 Maven common logging 并下载它的 jar 包,再加到项目里就可以了。

      我上图里是已经加过了的,所以你会看到一个 commons-logging-1.2.

      再运行一下就可以了。这里的两个文件上文都有截图。

      目前为止我们是手动用 set() 方法设置对象的,那怎么用 Spring IoC 呢?

      Spring IoC 配置文件详解

      还需要有一个配置文件,可是这个文件需要配置啥,该怎么配置呢?

      官网里都给我们写好了:

      吃透 Spring IoC

      第一段是一些命名空间及其规范的介绍,

      第二段就是给 bean 的属性赋值了。

      这里注意下 bean 里面的配置要改一下,改成我们这个项目对应的。这里的 id, class 是什么意思呢?官网上也有解释,我这里简单概括下:

      • bean 标签:告诉 Spring 要创建的对象
      • id: 对象的唯一标识,就像每个人的身份证一样,不可重复
      • class: bean 的完全限定名,即从 package name 到 class name
      • property:给属性赋值,name 的名称取决于 set() 方法后面的参数;

      其实也可以用 constructor 来赋值,name 的名称取决于参数列表;更多给复杂数据类型赋值的使用可以在官网查到。

      当然,在工作中更常用的是注解。但是往往也会有 xml 文件配合着一起使用的,所以还是要懂的。

      我的 service 文件配置如下:

      吃透 Spring IoC

      代码实现:

      吃透 Spring IoC

      这里面并没有直接的 new 这个 service,但是 Spring 容器帮我们创建了这个对象。

      那么 Spring 是如何帮我们创建对象的呢?

      ApplicationContext 是 IoC 容器的入口,其实也就是 Spring 程序的入口, 刚才已经说过了它的两个具体的实现子类,在这里用了从 class path 中读取数据的方式;

      然后第二行,就是获取具体的 bean 了。这个其实有很多方式,在使用的时候就能看到:

      吃透 Spring IoC

      点进去发现,是在 BeanFactory.class 里定义的:

      吃透 Spring IoC

      这其中比较常用的是通过

      • Id → 需要 cast
      • Bean 的类型 → 只能在 Singleton 的时候使用,否则不知道用哪个呀
      • Id + 类型 → 下图代码示例

      来获取对象,最后两种 String, Class objects 这种可变参数的方式用的很少。

      照猫画虎,我的 test 文件改动如下:

      吃透 Spring IoC

      成功运行~~

      Follow up 1. 对象在容器中默认是单例的

      实践是检验的唯一标准:

      再用 getBean() 得到一个对象,测试是否还是同一个。

      即:

      public class MyTest {
        public void test myTest() {
          ApplicationContext context = new ClassPathXmlApplicationContext("service.xml");
              Rectangle rect = context.getBean("rectangle", Rectangle.class);
              Rectangle rect2 = context.getBean("rectangle", Rectangle.class);
              System.out.println(rect == rect2);
          }
        }
      }

      返回 True or False?

      答:True

      因为默认是单例的,如果要改,需要在配置文件里改<bean … scope = “prototype”>.

      至于这些标签的用法,这里不再延伸了~

      Follow up 2. 容器中的对象是什么时候创建的?

      实践是检验的唯一标准:

      定义一个无参的 constructor,里面打印一句话,然后只 new ClassPathXmlApplicationContext,如下图:

      吃透 Spring IoC

      发现也是可以打印的,所以其实是每次启动容器的时候,就已经创建好容器中的所有对象了。(当然,这在 scope = "prototype" 的时候不适用,只是 singleton 的时候。)

      多说一句,其实最好应该一直保留一个无参的 constructor,因为这里 bean 对象的创建是通过反射,

      • clazz.newInstance() 默认是调用无参的 constructor

      不过,现在已经被弃用掉了,换用了这个:

      • clazz.getDeclaredConstructor().newInstance()

      使用 Maven 构建项目

      我们再回到最开始的构建项目,相信大家都体会到了手动导入 jar 包的繁琐之处,其实我们还可以用 Maven 来管理项目中的 jar 包,在公司中也是比较常用的一种方式,免除了手动下载 jar 包的过程。

      新建项目

      使用 Maven 的话就简化很多了,首先我们创建一个 Maven 项目,不同于刚才的过程在于:

      New Project 的时候要选择从 Maven 构建,而不是一个简单的 Java 项目。

      吃透 Spring IoC

      建好之后,我们会发现比起刚才的 Java 项目,多了很多东西:

      和之前的空项目不太一样,这里有 main, test,其中 resources 是放配置文件的地方,也就是我们刚才的 service.xml 应该放在这里,如果没有放对位置是代码找不到哦~

      吃透 Spring IoC

      添加对应的 pom 依赖,就不用手动导 jar 包了

      1. 仓库地址 https:///
      2. 搜 spring
      3. 选择 Spring context → 5.2.3 release,把里面的配置 copy 到 pom.xml 中

      最终在左边 external libraries 会自动出现所需的包,一键导入,不要太方便~

      写代码~~

      小结

      我们最后再来体会一下用 Spring 创建对象的过程:

      通过 ApplicationContext 这个 IoC 容器的入口,用它的两个具体的实现子类,从 class path 或者 file path 中读取数据,用 getBean() 获取具体的 bean instance。

      那使用 Spring 到底省略了我们什么工作?

      答:new 的过程。把 new 的过程交给第三方来创建、管理,这就是「解藕」。

       

      吃透 Spring IoC

       

      Spring 也是用的 set() 方法,它只不过提供了一套更加完善的实现机制而已。

      而说到底,底层的原理并没有很复杂,只是为了提高扩展性、兼容性,Spring 提供了丰富的支持,所以才觉得源码比较难。

      因为框架是要给各种各样的用户来使用的,它们考虑的更多的是扩展性。如果让我们来实现,或许三五行就能搞定,但是我们实现的不完善、不完整、不严谨,总之不高大上,所以它写三五十行,把框架设计的尽可能的完善,提供了丰富的支持,满足不同用户的需求,才能占领更大的市场啊。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/tntxia/10743770,作者:虾王之王,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:Java多线程编程

      下一篇:架构师必备知识 - 软件体系结构

      相关文章

      2025-05-16 09:15:10

      52.介绍AOP有几种实现方式

      52.介绍AOP有几种实现方式

      2025-05-16 09:15:10
      gt , lt , Spring
      2025-05-14 10:02:58

      java项目多端数据同步解决方案

      多端数据同步是指在多个设备(例如桌面应用、移动应用、Web应用)之间保持数据的一致性。

      2025-05-14 10:02:58
      java , Spring , WebSocket , 同步 , 数据 , 版本号
      2025-05-09 08:50:35

      SpringBoot学习(1)

      Spring Boot是Spring提供的一个子项目,用于快速构建Spring应用程序。

      2025-05-09 08:50:35
      Spring , 依赖 , 应用程序 , 部署 , 配置 , 配置文件
      2025-05-09 08:20:32

      系统架构——Spring Framework

      Spring Framework 是 Spring 生态圈中最基础的项目。其它所有的项目的都是在它的基础上运行使用。

      2025-05-09 08:20:32
      AOP , Data , Spring , 学习 , 模块
      2025-05-06 09:19:51

      springboot系列教程(三十二):SpringBoot 教程之处理异步请求

      springboot系列教程(三十二):SpringBoot 教程之处理异步请求

      2025-05-06 09:19:51
      Spring , 异步 , 方法 , 返回值
      2025-05-06 09:19:12

      Spring多线程事务 能否保证事务的一致性(同时提交、同时回滚)?

      Spring的事务信息是存在ThreadLocal中的Connection, 所以一个线程永远只能有一个事务

      2025-05-06 09:19:12
      Spring , 事务 , 多线程 , 线程
      2025-04-22 09:28:19

      61. Spring事务传播行为实现原理

      61. Spring事务传播行为实现原理

      2025-04-22 09:28:19
      Spring , ThreadLocal , 事务
      2025-04-18 07:10:30

      深入解析 Spring Security —— 打造高效安全的权限管理体系

      Spring Security 是一个专注于认证与授权的安全框架,致力于保护 Web 应用程序的资源安全。通过高度灵活的配置和模块化的设计,它能够满足各种复杂的安全需求。

      2025-04-18 07:10:30
      Security , Spring , 权限 , 用户 , 角色 , 认证 , 配置
      2025-04-18 07:09:19

      深入理解Spring中的Bean循环依赖与解决机制

      Bean循环依赖是指两个或多个Bean之间相互依赖,形成依赖闭环的情况。例如,Bean A依赖Bean B,而Bean B又依赖Bean A。这种情况下,如果没有特殊处理,容器将无法正确初始化这些Bean,从而导致应用启动失败。

      2025-04-18 07:09:19
      Bean , Spring , 依赖 , 初始化 , 循环 , 缓存 , 解决
      2025-04-11 07:16:05

      软件设计模式系列之六——单例模式

      单例模式(Singleton Pattern)是一种常见的创建型设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取该实例。

      2025-04-11 07:16:05
      bean , 创建 , 单例 , 实例 , 应用程序 , 模式 , 确保
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5255592

      查看更多

      最新文章

      52.介绍AOP有几种实现方式

      2025-05-16 09:15:10

      java项目多端数据同步解决方案

      2025-05-14 10:02:58

      系统架构——Spring Framework

      2025-05-09 08:20:32

      springboot系列教程(三十二):SpringBoot 教程之处理异步请求

      2025-05-06 09:19:51

      Spring多线程事务 能否保证事务的一致性(同时提交、同时回滚)?

      2025-05-06 09:19:12

      61. Spring事务传播行为实现原理

      2025-04-22 09:28:19

      查看更多

      热门文章

      使用Spring的AOP时报错“ClassCastException: com.sun.proxy.$Proxy5 cannot be cast to com.demo.aop.Target“

      2023-06-14 09:12:07

      Ajax续

      2023-07-11 08:55:43

      Spring-AOP

      2023-05-25 14:43:25

      《Spring Cloud Config官方文档》之推送通知和Spring Cloud总线

      2022-11-08 07:33:17

      《Spring Boot官方指南》28.安全

      2023-02-15 10:01:11

      Spring-AOP的通知类型

      2023-07-06 09:42:12

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      springboot项目报错Request header is too large之解决方案

      Spring Boot应用的数据库连接池管理

      28. SpringBoot启动时的Banner设置【从零开始学Spring Boot

      Spring AOP简介

      【Autowired自动注入map】

      9、使用Java High Level REST Client操作elasticsearch

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号