我从容器来

容器组_初始化容器 Pod 可以包含多个工作容器,也可以包含一个或多个初始化容器,初始化容器在工作容器启动之前执行。初始化容器总是运行并自动结束kubelet 按顺序执行 Pod 中的初始化容器,前一个初始化容器成功结束后,下一个初始化容器才开始运行。所有的初始化容器成功执行后,才开始启动工作容器如果 Pod 的任意一个初始化容器执行失败,kubernetes 将反复重启该 Pod,直到初始化容器全部成功(除非 Pod 的 restartPolicy 被设定为 Never) 阅读详情

不知道谁把我创建出来的,反正我一出生就知道了自己的名字:  Account@736e9adb, 我的名字很有特色,Account表示类名, 736e9adb 相当于我的ID。

我环顾四周,大家的名字和我都差不多,只有一个家伙是例外,它叫做 Account$$BySpringCGLIB$$caa5f28f@4fccd51b

这名字怎么会这么长? 

我问他:“你这家伙的名称怎么和我们不一样呢? ”

“那当然了,” 他骄傲地说, “你们是直接new出来的,而我则是从容器来的!”

“容器?”

“是啊,你们没看到我的名字中有个BySpring吗? 我就是从Spring容器来的,容器负责我们的生命周期,管理我们的生老病死。在Sping容器中,我们这些Java对象被称为Bean。 对了,你知道吗? 除了Spring之外,还有其他‘容器’,比如Tomcat, Jetty等可以叫做Servlet的容器,管理Servlet的一生, Weblogic,Websphere等就是EJB的容器,当然现在EJB不怎么用了。”  这家伙知道的东西倒是不少。

“你说的生命周期是什么意思? Java 对象不就是new出来,然后使用,最后被垃圾回收吗?” 我问道。

“容器给我们规定了详细的生命周期,每个Spring的Bean都得严格执行生命周期的各个步骤。大致包括实例化,初始化,运行,销毁这么几个阶段。”  他说着给我们画了一张图。

640?wx_fmt=png

“你们这些容器管理的'Bean'这么复杂啊? 我还以为new出来以后,就可以直接运行干活了。” 

“是啊, 其实生命周期在我们计算机软件界是很常见的事情,例如Servlet有生命周期,init->service->destroy。  React 组件也有生命周期 创建->更新->卸载,   Android的Activity也有生命周期,什么create, start, running, pause, stop ,destory等等, 大同小异。 这是非常细腻的管理,我们都很享受。”

我心里想,这些被容器管理的对象就是不一样,把短暂的一生分得这么细致。 

“可是,这么做的意义是什么?”  

“一个很重要的原因就是方便扩展啊,拿我们Spring容器来说,在生命周期的每个阶段开始和结束的时候,设置了一些钩子(Hook)函数,让大家随意扩展。”

640?wx_fmt=png

(注:为了更容易读,我修改了方法名,和Spring源码不一致)

“钩子函数?”  我从来没有听说过。

“对啊,看到那些beforeXXX, afterXXX了吗? 这些都是钩子函数,如果你想在Bean的实例化或者初始化前后做点事情,就可以写一个类,当然得实现特定的接口(如InstantiationAwareBeanPostProcessor, BeanPostProcessor等),把这个类告诉我们的Spring容器,Spring就会在特定的时刻去调用了。”

“有这个必要吗?” 

“怎么没有必要?看到图中那个processPropertyValues()方法了吗,对,就是红色那个,在这个方法中,就可以实现Spring的@Autowired注解,把一个Bean依赖的其他对象给注入进来。 再比如那个afterInitialization()方法, 在里边创建一个对象的代理出来。这个代理在调用真正对象的方法之前,可以执行一些事务,安全,日志等操作,嗯, 人类把这种行为称为AOP。”

“代理 ? 怪不得你的名称和我们的不一样, 你的类名其实叫做Account$$BySpringCGLIB$$caa5f28f,你根本不是Account类,对不对?”  

我的这句话引起来大家的注意,其他Account对象纷纷围了过来。 要看看这个混入我们Accoun类家族的“奸细”。 

“嘿嘿,大家别紧张。 没错,我确实是从被增强了的一个新的Java Class创建的 ,不过我们也是一个家族啊,Account$$BySpringCGLIB$$caa5f28f 是运行时通过CGLib生成的, 是Account类的子类啊! 你们Account类拥有的方法, 我也都有,感谢伟大的多态, 在客户端看来,我就是个普通的Accout对象,客户端根本意识不到Spring容器在背后所做的小动作。”

640?wx_fmt=png

//这里获得的account对象其实已经是被增强过了的类
//Account$$BySpringCGLIB$$caa5f28f
Account account = ctx.getBean("account");
//客户端还以为在调用原有的withdraw方法,但是由于多态的存在
//其实是增强类的withdraw方法,其中被添加了事务的功能。
account.withdraw();

(友情提示:可左右滑动)

“你这一招瞒天过海玩得可真溜啊。”  有个Account对象说道。 “你有这么强大的功能, 在我们这里不是抢我们的生意吗? 赶紧走吧!”

“走? 你让我去哪儿, 我也是堂堂正正的Java对象,也在Java Heap中生活!我还是个Singleton , 誓与容器一起共存亡!”

几个Account对象上来推搡他。

可是奇怪的事情发生了,那些个Account莫名其妙地消失了。

这个从Spring容器出来的Bean哈哈大笑:“瞧瞧,估计你们都是在一个for循环中生成的临时对象,生命短暂,很快被垃圾回收了! ”

640?wx_fmt=gif

与此同时,这个计算机系统的神在冷眼旁观,在他看来,根本就没有什么对象,什么容器,什么代理,它所看到的,只是内存中的那些二进制数据而已。

神的座右铭是:毁灭你,与你何干。

就在刚才,神调度了Java 虚拟机进程的一个线程运行,这个线程对内存的数据做了一些操作,仅此而已。

(完)

广告时间:使用CGLib,Java动态代理来实现AOP在我的课程《从零开始造Spring》中有详细讲解和代码实现。

码农翻身,用故事讲解技术本质, 更多精彩文章,请移步《码农翻身文章精华》


Docker 容器技术 — 容器存储 目录 文章目录目录容器存储数据卷管理挂载时创建卷创建卷后挂载数据容器管理 容器存储 数据卷管理 核心选项: -v 宿主机目录:指定挂载到容器内的目录。 映射多个宿主机目录,只需要多写几个 -v 即可。 挂载时创建卷 挂载卷: docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest 设置共享卷,使用同一个卷启动一个新的容器: docker run -d -p 8080:80 -v /data:/usr/share/ng 阅读详情

相关推荐

10X Genomics数据实战:手把手教你用Seurat处理单细胞PBMC数据(附完整代码)

本文详细介绍了如何使用Seurat处理10X Genomics的单细胞PBMC数据,从数据获取、质控到降维分析和细胞分群的全流程。通过实战代码演示,帮助研究者掌握单细胞RNA测序数据分析的核心技术,提升对细胞异质性的理解。

weixin_29053577的博客 254

Spring ——Bean(IOC)容器

spring framework——Bean容器 为什么需要Bean容器? 一般的项目搭建,都需要将各层进行分离以降低代码之间的耦合度。比如我们常用Dao层(数据访问层)、service层来封装和数据库的交互部分,其中Dao层负责具体的增删查改,service层负责调用Dao层的方法来对外提供服务。例如: 使用这种方法调用数据库,相当于将对象放到了方法中,此时对象对应的变量(局部变量)随着栈帧的创建而出现,随着栈帧的退出而销毁。那么由于没有引用指向它,该对象就会很快变成可回收状态。如果对象的创建初始化较为

长不大的大灰狼 2459

【VMware篇】7-通过ISO镜像升级VMware Esxi

本文主要介绍Dell服务器上安装的ESXi升级的方法之一(采用ISO升级)。

chen_yunan的博客 5518

Spring源码解析(二):bean容器的创建、注册默认后置处理器、bean定义扫描类

}//创建注解容器,入参为配置类 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config . class);//获取某个bean Book book = context . getBean(Book . class);//关闭容器 context . close();} }调用ClassPathBeanDefinitionScanner的有参构造方法。

从基础到源码解析的学习记录 1885

10分钟快速搭建OpenClaw(基于Windows+飞书)

OpenClaw 是一款功能强大的 AI 智能体工具,能够帮助用户管理邮件、日历等日常事务。本文详细介绍了在 Windows11 系统上安装和配置 OpenClaw 的完整步骤,包括 Node.js 环境搭建、Git 安装、OpenClaw 部署以及飞书机器人创建与对接。通过简单的命令行操作和可视化界面配置,用户可以快速完成 AI 助手部署,实现智能办公自动化。文中还提供了飞书机器人权限设置等关键环节的图文指引,帮助用户轻松完成系统集成。

Hello, New World! 2927

【TC3xx芯片】TC3xx芯片电源管理系统PMS详解

本文主要介绍了TC3xx芯片的电源管理系统(PMS),重点探讨了供电模式选择、电源监控机制及电源管理模式。文章首先分析了4种供电模式及其硬件配置方式,详细说明了3.3V单电源供电模式的特点;其次阐述了Primary和Secondary两种电源监控机制,包括阈值配置和异常中断处理;最后重点讲解了CPU和系统的电源管理模式,特别对Standby模式及其进入/退出条件进行了详细说明。文章以软件开发视角解析了TC3xx芯片的电源管理功能,为ECU低功耗设计提供了技术参考。

redparrot2008的博客 1531

Bean注入容器的多种方式

bean注入容器

u014365523的博客 3493

Mann-Kendall检验全解析:从原理到11种变体及Python实现

本文全面解析Mann-Kendall检验,从基础原理到应对自相关、季节性等复杂数据的11种关键变体,如Hamed-Rao修正、季节性MK和趋势自由预白化(TFPW)。详细阐述各方法的适用场景与数学原理,并提供完整的Python实战代码,帮助研究者针对不同数据特性选择最稳健的趋势分析方法。

weixin_29050271的博客 460

Java Bean容器详解:核心功能与最佳使用实践

Bean容器是框架的核心组件之一,它通过管理对象(Bean)的生命周期、依赖关系等,显著提升了代码的可维护性和扩展性。

weixin_54524403的博客 1527

工厂自动化布线实战:从功率计算到线槽布局的完整避坑指南

本文详细介绍了工厂自动化布线的实战经验,从功率计算到线槽布局的完整避坑指南。通过三步计算法确定线径需求,强调电压降控制的重要性,并分享线槽布局的50%法则和强弱电分离技巧。特别针对移动设备和多芯信号线提供专业解决方案,帮助工程师避免常见错误,提升布线效率和质量。

weixin_29266007的博客 355

运放+MOS恒流源电路仿真分析

利用运放设计一个恒流源

HW-BASE的博客 4097

“Spring管理JavaBean的过程及Bean的生命周期“

在Spring容器启动过程中,会将Bean解析成Spring内部的BeanDefinition结构;理解为:将spring.xml中的标签转换成BeanDefinition结构有点类似于XML解析通过本文的介绍,我们深入了解了Spring管理JavaBean的过程,并详细讨论了Bean的生命周期。我们了解了Bean的实例化、属性赋值、初始化、使用和销毁等阶段。此外,我们还介绍了Spring中的单例模式和原型模式,并解释了它们在JavaBean管理中的应用。

2201_75869073的博客 2051

【LDPC-7】LLR量化位宽对LDPC译码性能的影响分析——以最小和译码算法为例进行matlab仿真

最小和译码算法的步骤如下:最后译码结果如果满足或者完成所有迭代次数,则译码算法停止迭代,否则继续进行译码迭代操作。

FPGA/MATLAB学习教程/源码/项目合作开发 1471

Web服务器、Web容器、Servlet容器、Spring容器、SpringMVC容器

一、服务器和容器 1. Web服务器 2. Web容器 ① Web容器的组成 ② Web容器的作用 3. Servlet容器 ① Servlet容器的作用 ② Servlet容器的工作过程 ③ Servlet ④ Servlet的工作过程 ⑤ Servlet变化过程 4. Spring容器 5. SpringMVC容器 6. SpringBoot容器 二、容器相关知识归纳 1. 各种容器的管理范围 2. 为何设计父子容器 3. 父子容器的事务问题 三、各种项目中的容器 1. SpringMVC项目 ① 项目

骑个小蜗牛的博客 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

servlet容器,web容器,spring容器,springmvc容器,dubbo容器之间区别

文章目录1 各个容器1.1 Web容器1.2 Servlet容器1.3 Servlet容器和ServletContext的关系1.4 Spring容器和SpringMVC容器1.5 spring与springmvc容器区别1.6 dubbo容器与spring,springmvc容器区别2 容器间的关系图 1 各个容器 1.1 Web容器 web容器(web服务器)主要有:Apache、IIS、To...

上善若泪 5137

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring容器 SpringMVC容器 web容器的关系

说到spring和springmvc,其实有很多工作好多年的人也分不清他们有什么区别,如果你问他项目里用的什么MVC技术,他会说我们用的spring和mybatis,或者spring和hibernate。 在潜意识里会认为springmvc就是spring,之前我也是这么认为的,哈哈。   虽然springMVC和spring有必然的联系,但是他们的区别也是有的。下面我就简单描述下   首...

Learning 8792

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Docker 】Docker 客户端,容器使用,启动容器,启动已停止运行的容器,停止一个容器,进入容器

【Docker 】Docker 客户端,容器使用,启动容器,启动已停止运行的容器,停止一个容器,进入容器

2201_75366661的博客 6273

Java容器有哪些?哪些是同步容器,哪些是并发容器?

Java容器有哪些?哪些是同步容器,哪些是并发容器?一、基本概念新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入...

u013030086的博客 6961

servlet容器,web容器,spring容器,springmvc容器的区别

这个理解我可以通过一个http的页面请求来说明。 web容器中有servlet容器,spring项目部署后存在spring容器和springmvc容器。其中spring控制service层和dao层的bean对象。springmvc容器控制controller层bean对象。servlet容器控制servlet对象。项目启动是,首先 servlet初始化,初始化过程中通过web.xml中spri...

万米高空的博客 1万+

什么是容器安全,该怎么进行容器安全的检测防护

1、资源可视化管理:容器、镜像、主机作为容器环境中核心的资源,需要建立全局的可视化管理,以清晰地了解资源的风险、数量、关系的变化。总的来说,容器安全是一个复杂且重要的领域,它涉及到容器的整个生命周期和各个方面,需要综合考虑多个方面,来确保容器的安全性,而德迅蜂巢就很好的满足用户的这些容器安全需求。2、镜像风险管理:镜像作为容器的基础,其安全性至关重要。通过提供覆盖容器全生命周期的一站式容器安全解决方案,德迅蜂巢可实现容器安全预测、防御、检测和响应的安全闭环,综合多项安全功能,确保容器及容器内应用安全。

dexunyun的博客 3819

web容器,servlet容器,spring容器,springmvc容器的联系

关系图 借鉴网上看到的一张图,来源于: https://blog.youkuaiyun.com/zhanglf02/article/details/89791797 web容器中有servlet容器,spring容器,springmvc容器。 servlet容器保存 Servlet对象。 springmvc容器保存 Controller对象。 spring容器保存 Service、Dao对象。 spring容...

Markix的博客 1125

顺序容器和关联容器的区别。有序容器和无序容器的区别。

顺序容器和关联容器图示: 1.顺序容器和关联容器的区别: ①顺序容器只有实值val。 ②关联容器的一个元素包含两个部分:键值对(key-value) 即<k值(键值)|实值>。 ③顺序容器不涉及排序,关联容器内部自动排序。 ④本质区别:顺序容器通过元素在容器中的位置顺序存储和访问元素,而关联容器则是通过键(key)存储和读取元素的。 2.关联容器中的 有序容器和无序容器的区别...

匿名攻城狮 5909

什么是容器?有哪些主流的容器技术?

大家好呀!我是reload。今天来带大家学习一下什么是容器以及了解一些主流的容器技术。一、容器概述1、什么是容器?容器是一种轻量级虚拟化技术,允许应用程序及其依赖项被打包到一个可移植的容器中,这个容器可以在任何安装了Docker引擎的服务器上运行,包括Linux和Windows机器。容器使用沙箱机制,相互之间没有任何接口,实现了应用程序与操作系统的解耦。Kubernetes(K8S)是一个开源的,...

qq_56999608的博客 1万+

Docker系列第04部分:查看容器+创建容器+启动容器+文件挂载+删除容器

可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器里所对应的目录。创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。停止正在运行的容器:docker stop $CONTAINER_NAME/ID。解释:cp 当前目录下的a文件到 容器中的/usr/local/下的a文件。删除指定的容器: 这个命令只能删除已经关闭的容器,不能删除正在运行的容器。查看所有的容器(启动过的历史容器)

小李的研究生学习日记 9974

c++容器之一 顺序容器

在C++中,容器的概念是指一种类型容器在数据上提供一种有效的反射光来管理一组元素容器在C++中通常是的形式容器就是一个数据格式的,想存储多种数据的数据,使用结构体所有的容器都是以的方式实现的联系:数组在广义上可以被视为一种容器,,因为它用于存储一组相同类型的元素区别:创建和大小调整:数组:在创建数组时,必须指定其大小,且一旦创建,数组的不能动态改变容器:容器的创建不需要预先指定大小,且,根据需要添加或删除元素。

2403_84775671的博客 1252
上一篇: 写给孩子看的Kubernetes动画指南【中英字幕】
下一篇: 程序员最头疼的七件事
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值