看这个代码:
String str2;
do{
String str1 = new String("abc");
str2 = new String("cde");
}while(false);
String str3 = str2;
出了以上代码块,str1指向的instance就没有地方hold住了,没办法操作那instance了,这个instance就消失了等待垃圾回收。
而出了以上代码块后,str2指向的instance被两个地方hold住了,一个是str2,一个是str3。
这是java简单的语法和规则。
java简单到可以只缩为“代码”,“内存”和“线程”几个概念,线程是cpu时间片的承载,代码可以通过JNI调用C library和系统调用。“instance1.method1()”中点号可以看作将执行流程和控制切换给这个instance,同时以上这句话不会模糊线程和cpu时间片的概念。
在JVM进程里,所有instance对象,都可以看作处在同一个平坦的内存中,包括你web app里的instance或被spring hold住的instance,还是tomcat本身的instance,weblogic也一样。
在JMX里注册了一个MBean,JMX能改变web app的参数,web app能接受JMX的改变要求,是因为同一个instance被两个地方hold住了。
所以JNDI, JMX, Spring等其中一个基本原理都可看作 : instance holder mechanism for connect(contact) or a container to holder instances
Java/J2EE的世界就是container的世界。
touch function: shift thread cpu time & control flow to another instance
由以上看清jvm内都是一个强关联的整体,关键是你有没有路径去寻址,有时候你只有个接口对象,但没实现类,而你需要的instance其实是被实现类 hold住的,所以你访问不到没暴露给你的东西,你没办法寻址,所以所谓“平台”通过接口将你封闭住了。如果你想设计弱关联的plug-in机制,或许可以从这个角度去想想。弱关联,只是在plug-in内部弱关联而已,你让某plugin内部代码只能通过一条路径寻址到其他plug-in的 instance,那就达到一种比较好的封装性,这条寻址路径也是受你控制的。
更具体一点是,某plugin通过一字符串lookup()到另一服务(这其中的过程是,cpu片切换到一个container去执行,container会返回另一服务的instance给你),就可以与另一服务通讯,如果某时间lookup不到就只有暂时忍忍了,要不就NullPointerException了。如果你想控制plugin间的通讯,可以在返回 instance时加个代理插一脚。如果终端instance没准备好时,平台可能会给一个dummy instance代理,让plugin干不成事,也不会出错。plugin平台肯定是要设计interface的。
与lookup()主动式概念类似,Spring或其它instance container或plugin平台会根据某些规则自动组织(注入)instance给你,对象网就是这样组织的,plugin平台就是这样组织的。
更弱关联的plugin机制是,调用与平台沟通的方法后不返回另一plugin的instance,只是由平台调用另一plugin的instance后返回执行后数据的instance,比如是XmlBus或SDO这样中间格式的instance。
以下给出一个最终化的plugin体系示意图:
OSGi也脱离不了这样的结构,可以从这个原理思考OSGi中的问题。OSGi还利用上ClassLoader机制。
request是个holder, session是个holder, servletcontext也是个holder,tomcat也是个holder,所有对象都是个holder,有reference就是holder/container
不知道tomcat context.xml中crossContext="false"是不是也可以用这个原理进行思考。
不知道JBoss 5.0从JMX微内核结构转到POJO微内核结构,是不是可以这个原理思考一下,并研究源代码充分吸收JBoss的技术。
instance是不能跨越jvm和进程的,jvm间只有通过操作系统机制和tcp port间关联
plugin平台还有个欲望是“控制”,或许有人想用AOP来控制,Spring AOP是用动态代理,在其中插入了一个代理Instance,所以是有两个Instance,所以在终端Instance内部调用本Instance其他 method时,不被拦截住。而AspectJ AOP改变了字节码,只有一个Instance
分享到:
相关推荐
在"holder-master"这个压缩包中,包含了项目的核心代码、示例、文档等资源。开发者可以通过阅读源码了解其内部工作原理,也可以直接引用提供的库文件到自己的项目中。在实际应用中,可以使用以下方式集成Holder.js:...
Sample Holder Test ProgramPROCESSOR Microchip PIC16F877Read 4 channel A/D2x20 LCD display show 4 channel keep value
- **Decoder(解码器)**:详细说明解码器的工作原理和实现方法。 - **Encoder(编码器)**:介绍编码器如何将应用层数据转换成网络可以传输的形式。 - **抽象Codec(编解码器)类**:探讨Netty提供的抽象类,帮助开发者更...
Holder技术的核心是利用一个额外的对象(通常是持有某个引用类型的类)来传递和修改函数内外的对象引用。在上述的IntegerHolder示例中,`ChangeInteger`方法展示了两种不同的行为: 1. 直接接收Integer对象作为参数...
标题中的“Power-Holder_holder_PSU_Cool_powersupply_3dprint_”指的是一个用于固定和优化电源供应器(PSU,Power Supply Unit)散热的3D打印模型。这个设计旨在提供一种创新的方式来存放电源供应器,同时提高其...
SIM卡,全称为Subscriber Identity Module,是GSM通信系统中不可或缺的部分。它的主要作用是存储用户的个人信息和鉴权数据,...通过理解SIM卡的工作原理和安全特性,用户可以更好地理解和利用其在移动通信中的功能。
NX二次开发UF_CUTTER_ask_holder_data 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业...
- 电缆支架(Cable holder):提供了拆装电缆支架的详细步骤。 - 内存模块(Memory modules):说明了拆卸和安装内存条的过程。 - 纽扣电池(Coin cell battery):描述了纽扣电池的移除和安装流程。 - 固态硬盘...
NX二次开发UF_CUTTER_edit_holder_section 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的...
NX二次开发UF_CUTTER_delete_holder_section 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域...
NX二次开发UF_CUTTER_create_holder_section 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域...
iMX6Q核心板配套开发底板AD设计硬件原理图+PCB+元器件BOM文件,AltiumDesigner 设计的工程文件,包括完整的原理图、PCB文件,采用6层板设计,板子大小为135x115mm,单面布局双面布线,可以用Altium(AD)软件打开或修改...
Image [holder height="50" width="100" text="thumbnail"] in content holder_add_theme ( 'wordpress' , 'd54e21' , '464646' );安装插件是一个包,可以通过以下方式安装: composer create-project rarst/holder...
Battery Holder- CR1220-SMD.STEP Battery Holder-CR2032 -DIP.STEP batteryCR2016.STEP batteryCR2025.STEP BL-5CT.STEP BL-5j.STEP CR1220 BAT.STEP CR1220.STEP cr2032 pcb, lithium battery-1.STEP CR2032.STEP ...
ATmega16单片机+DS1307ZN+DS18B20Z温度记录仪PDF原理图PCB+AD集成封装库, Library Component Count : 21 Name Description ------------------------------------------------------------------------------------...
A grace recycleriew holder animation library for Android ViewHolder-Slide-Helper use Animation and Scroller, expend recyclerview holder Gradle Add it in your root build.gradle at the end of ...
MAX4239AUT+LMV321AS5X设计微电流检测模块ALTIUM设计【硬件原理图+PCB】,Altium Designer 设计的工程文件,包括原理图及PCB文件,2层板设计,板子大小为78x50mm,双面布局布线,可以用Altium(AD)软件打开或修改,可...
如果你是 项目管理者,小弟特别菜,他写的代码都写在你的activity里面了,当初bug的时候 他果断说不会改,你只能加班自己改。我被坑过无数次,为此很早就想写一个类,让所有代码分工明确不互相干扰,更好的管理
"Data Holder .NET Framework"是一个专为.NET应用程序设计的开源框架,旨在简化数据对象的创建、封装和与数据库的交互。该框架的核心理念是数据持有者对象(Data Holder Objects),它提供了一种类型安全的方式来...