• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

数据库中数据项变化不定,如何设计Java Beans(4)

发布: 2007-7-14 21:19 | 作者: 佚名    | 来源: 网络转载     | 查看: 30次 | 进入软件测试论坛讨论

领测软件测试网 数据库中数据项变化不定,如何设计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 accessed 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与他联系。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网