数据库中数据项变化不定,如何设计Java Beans(4)
发表于:2007-07-14来源:作者:点击数:
标签:
数据库 中数据项变化不定,如何设计Java Beans(4) · 3.2.2 使用propertyUtils实用类访问扩展属性 下面propertyUtils以五中格式访问扩展属性的代码: CC CCCC">//testpropertyUtils. java import org.apache..commons.beanutils.*; import junit .framewor
数据库中数据项变化不定,如何设计Java Beans(4)
· 3.2.2 使用propertyUtils实用类访问扩展属性
下面propertyUtils以五中格式访问扩展属性的代码:
CCCCCC">//testpropertyUtils.java import org.apache..commons.beanutils.*; import junit.framework.TestCase; import junit.framework.Test; import junit.framework.TestSuite; public class testpropertyUtils extends TestCase { public propertyUtilsTestCase(String name) { super(name); } /** * 实例化TestBean */ public void setUp() { bean = new TestBean(); } /** * 测试索引属性 */ public void testSetIndexedValues() { Object value = null; //测试数组索引属性 try { propertyUtils.setproperty(bean, "dupproperty(0)", "New 0"); value = propertyUtils.getproperty(bean, "dupproperty(0) "); assertNotNull("Returned new value 0", value); assertTrue("Returned String new value 0", value instanceof String); assertEquals("Returned correct new value 0", "New 0", (String) value); } catch (Throwable t) { fail("Threw " + t); } //测试List索引属性 try { propertyUtils.setproperty(bean, "listIndexed(0) " , "New value"); value = propertyUtils.getproperty(bean, " listIndexed(0)"); assertNotNull("Returned new value 0", value); assertTrue("Returned String new value 0", value instanceof String); assertEquals("Returned correct new value 0", " New value ", (String) value); } catch (Throwable t) { fail("Threw " + t); } } /** * 测试映射属性 */ public void testSetMappedValues() { Object value = null; try { propertyUtils.setproperty(bean, "hash(key1)", "New 0"); value = propertyUtils.getproperty(bean, "hash(key1)"); assertNotNull("Returned new value 0", value); assertTrue("Returned String new value 0", value instanceof String); assertEquals("Returned correct new value 0", "New 0", (String) value); } catch (Throwable t) { fail("Threw " + t); } } /** * 测试嵌套属性 */ public void testNestedValues() { …. } } |
· 4、动态bean
相对标准Java Bean的编译时静态决定一个Bean的属性,利用扩展javaBean属性机制,能在运行时决定属性的bean为动态bean。动态bean既有标准Java Bean的类型检查机制又有扩展javaBean属性机制的动态特点。下面我们从创建动态Bean和在配置文件中定义动态Bean的属性两方面介绍common-beanutils中动态bean机制。
· 4.1 运行时创建动态bean
动态bean具有动态属性,也就是说可以由程序运行时构造bean的属性,而不是像标准的javaBean在编译时决定一个bean的属性。
定义和访问一个动态bean的步骤如下:
a 定义一个动态属性Dynaproperty数组,动态属性Dynaproperty定义了一个属性的名字和对象类型;
b 用定义好的动态属性数组实例化一个动态类;
c 由动态类返回一个动态bean;
d 可以用propertyUtils访问和设置动态bean的属性。
下面是定义和访问动态bean的代码
//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) { System.out.println("setDupproperty index value"); this.dupproperty[index] = value; } public void setDupproperty(String dupproperty[]) { System.out.println("setDupproperty du[]"); this.dupproperty = dupproperty; } //这是一个索引属性,除了支持"[]"型的数组属性外,还支持申明为List类型的属性 /** * A List property aclearcase/" target="_blank" >ccessed as an indexed property. */ private static List listIndexed = new ArrayList(); static { listIndexed.add("String 0"); listIndexed.add("String 1"); listIndexed.add("String 2"); listIndexed.add("String 3"); listIndexed.add("String 4"); } public List getListIndexed() { return (listIndexed); } //嵌套属性 private TestBean nested = null; public TestBean getNested() { System.out.println("getNested"); if (nested == null) nested = new TestBean(); return (nested); } //这是一个映射属性,必须申明为Map类型,propertyUtils只需要该属性的一个获取器操作就能 //使用get/setMappedproperty方法访问和设置键和值 private Map hash = null; public Map getHash(){ System.out.println("getHash"); if (hash == null) { hash = new HashMap(); hash.put("First Key", "First Value"); hash.put("Second Key", "Second Value"); } return (hash); } //下面的方法对在common-beanutils 1.6.1中propertyUtils 的getMappedproperty方法不起作用,中不调用这些方法, //而且不支持嵌套的映射属性 //propertyUtils.setMappedproperty(bean, "nested.hash(Fifth Key)", "Fifth Value"); don't work!! public Object getHash(String Key){ System.out.println("getHash Key"); return hash.get(Key); } public void setHash(String Key,Object value){ System.out.println("setHash Key value "); hash.put(Key,value); } //这是一个简单属性,想在propertyUtils中修改必须有设置器操作 private String sample = null; public String getSample() { return sample; } public void setSample(String sample){ this.sample = sample; } } |
· 关于作者
龚永生,对java技术,
Linux技术以及
项目管理非常感兴趣。您可以通过gongys@legend.com与他联系。
原文转自:http://www.ltesting.net