JavaBean与Java的Class的干系
要说Bean,就得提到Introspection和Reflection,尚有“动态”。
一般而言,开拓者社群说到动态语言,大抵认同的一个界说是:“措施运行时,答允改变措施布局或变量范例,这种语言称为动态语言”。从这个概念看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。
尽量在这样的界说与分类下Java不是动态语言,它却有着一个很是突出的动态相关机制(其实C++也是这样的动态机制):Reflection。这个字的意思是“反射、映象、倒影”,用在Java身上指的是我们可以于运行时加载、探知、利用编译期间完全未知的classes。换句话说,Java措施可以加载一个运行时才得知名称的class,获悉其完整结构(但不包罗methods界说),并生成其工具实体、或对其fields设值、或唤起其methods。这种“看破class”的本领(the ability of the program to examine itself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语。Java中的类都有这样的特点(有时间的话,可以看看Java的Class这个类)。
而JavaBean,首先是JAVA的一个类Class,然后再具有Bean的特点。简朴的说,就是切合必然类型(getter和setter的定名与变量名一致)的类。这样的类可以或许通过Java的reflexion机制,自动获取属性的值。常见的就是一些要领的定名getXXX(),setXXX(),一些事件吸收者的注册要遵守必然的类型。
由于JavaBean也是Java的一个Class类,所以JavaBean也有introspection和Reflection的性质。前者Introspection就是类的get和set要领,也就是类设定和获取自身属性值的要领。尔后者Reflection就是java措施在运行中查抄本身包括工具的本领,即可以在加载工具后得到工具属性和要领的名称,而且通过挪用前者得到一个值。尚有一个是Bean的Methode和Interface的定名具有Design Pattern的特点(这个也是可以忽略的。)
bean 提出来的目标是组件化,跟其他措施语言好比 delphi 中提出的控件是一样的, 不外它给出了一些类型, 假如各人都遵守了, 就可以利用同一种机制来挪用差异的控件。只是为了更利便重用性更强罢了,也不是专门为 web service 而提出了。对比之下,GUI类的 bean 跟一般观念上的组件更相象。别的Bean的class比一般的class有很多类型与限制,所以它们的实现机制纷歧样。
换句话说,JavaBeans其实就是一般的JAVA代码片断,只不外是思量了代码的重用而酿成一些“组件化”了的java措施代码,且依据必然的模式建造。
JavaBean在本质上和一般的类简直没不同。但在思想和利用上有些差异。如:JavaBean通过setXXX(),getXXX()等要领提供操纵Bean中数据的要领,这样在Web应用措施开拓时,页面设计者可以不消再和java代码打交道直接通过html标签就可以完成相应数据的操纵。这时Bean设计的目标,就在于将页面设计者和措施开拓者断绝。至于重用性,我倒感受和普通类不同不大。