· 2.2 标准Java Bean属性总结
图一 Java Bean属性综合图解
Java Bean组件技术是建立在Java基础上的组件技术,它继承了其的所有特点(如跨平台和面向对象),又引进了其它组件技术的思想,这两个方面恰好是其能成为后起之秀的主要原因。它所能支持的属性如相关属性和约束属性是其它组件技术所不能及的。
·3、扩展javaBean属性机制
无论是设计模式中值对象、视图助手,MVC框架中的模型(Model),还是Enterprise Bean中的会话Bean,实体Bean,都和javaBean属性息息相关。JavaBean组件属性的优点我们前面已经总结过,随着J2EE平台在企业应用中的广泛使用,JavaBean组件属性的缺陷也就显露了出来:无法满足企业应用动态变化的需要,原因在于javaBean属性是编译时的语言特性,它必须遵行一套命名规则和设计魔板。比如我按照某个企业的要求设计出了2000个实体Bean来满足该企业对信息系统中业务数据模型的需要,过了一定时间后,他们的业务发生了一定的变化,要对数据模型扩充一部分数据项,可想而知我会有多辛苦。
扩展javaBean属性机制定义了五种属性访问策略,使得属性的访问代码像脚本一样在运行时决定,另外一个进步就是它支持List和Map属性的元素属性,也就是扩展javaBean属性机制它不把一个Bean的某个List和Map成员看成一个整体属性,而是动态地把这个List和Map成员的元素看成属性,这样无疑提供了一种无限扩展Bean属性的能力,为解决由于数据项变化带来的设计和实现的变更提供了技术基础。
· 3.1 五种属性访问格式
Common-beanutils 1.6中的propertyUtils实用类使用Java语言的内省反射功能实现扩展属性的设置器和获取器。propertyUtils定义了引用一个特定Java bean属性的五种格式:
1、简单属性,格式beanName.propName。propName标识了JavaBean beanName的一个属性,这个属性的获取器和设置器的方法是通过JavaBean的标准内省功能决定的。如果要改变简单属性的值,必须要有设置器操作,可以想象成类似调用beanName.[getpropName()|setpropName(value)];
2、嵌套属性,格式beanName.propName1.propName2.propName3。像简单属性一样,第一个propName1元素被用来选择一个属性获取器方法,在这个方法返回的对象上使用propName2的获取器方法返回下一个对象,最后这个对象的属性propName3被访问或设置,可以想象成类似调用beanName.getpropName1().getpropName2().[getpropName3()|setpropName3(value)];
3、索引属性,格式beanName.propName[index]。属性propName1可以是一个数组, java.util.List或者JavaBean beanName有索引属性获取器和设置器操作。bean只需propName的获取器方法,可以想象成类似调用beanName. [getpropName (index)|setpropName(index,value)];
4、映射属性,格式beanName. propName(key)。propName是一个java.util.Map实现。bean只需propName的获取器方法,可以想象成类似调用beanName. getpropName ().[get("key")|set("key",value);
5、组合属性,格式beanName. propName1.propName2[index].propName3(key)。
·3.2 代码解释
为了更有效和直观的解释扩展属性的使用,在这里列出了两段代码,一段代码是Java Bean 代码,一段为propertyUtils以五中格式访问扩展属性的代码。
· 3.2.1 扩展属性Java Bean
下面是支持这些扩展属性的Java Bean代码:
CCCCCC" class="code">//TestBean.java import java.util.*; import java.io.*; public class TestBean { private String dupproperty[] = { "Dup 0", "Dup 1", "Dup 2", "Dup 3", "Dup 4" }; //propertyUtils只需要该索引属性的一个获取器操作就能 //使用get/setIndexedproperty方法访问和设置索引和元素值 public String[] getDupproperty() { System.out.println("getDupproperty"); return (this.dupproperty); } //下面的方法对propertyUtils的get/setIndexedproperty方法不关键,有则会调用这些方法 public String getDupproperty(int index) { System.out.println("getDupproperty index"); return (this.dupproperty[index]); } public void setDupproperty(int index, String value) { public void setDupproperty(String dupproperty[]) { static { public List getListIndexed() { //这是一个映射属性,必须申明为Map类型,propertyUtils只需要该属性的一个获取器操作就能 public void setHash(String Key,Object value){ |
(未完待续)
文章来源于领测软件测试网 https://www.ltesting.net/