DynaBean 收藏
DynaBean是BeanUtils里的宝贝之一。有了动态Bean,就不用写那么多VO出来了,特别那些只是为了和View交互而存在的bean,i hate Form Bean。
DynaBean的用法很简单,特别是有了LazyBynaBean之后.
DynaBean car = new LazyDynaBean(); car.set("carNo",1); car.set("owner","张三"); out.print(car.get("carNo")); 看着像一个map,只不过多了反射的功能,所以支持那些使用反射来获取属性的场合。
但是因为他没有car.getCarNo()这样的函数,只能用car.get("carNo"),所以也就不支持JSTL里面<c: out value="{car.carNo}">这样的语法,因为JSTL是默认转回car.getCarNo()的。
而且几经讨论,JSTL不支持 car.userFunction(),理由是不希望代码里有java代码:(
因此,还是写<%=car.get("carNo")>好了,如果是陷在JSTL的一个循环结构里,就要用从pageContext里面把bean拿出来,
又或者自己写的tag,幸亏也很简单,用BeanUtils.getProperty(bean,property)函数就可以了,
又或者,用Velocity和Freemarker。
最后,如果car.set("carNo",null),会得到一个莫名其妙的Object对象,如果要使它为Null,需要先定义他的类型。
因此,对于可能为Null的列,需要用LazyClass定义类型,幸亏也很Lazy, 不可能为Null的值可以不管。
LazyDynaClass lc = new LazyDynaClass();
lc.add("owner",String.class); // 指定null converter String
DynaBean car = new LazyDynaBean(lc);
car.set("carNo",1);
car.set("owner",null);
DynaProperty[] beanProperties = new DynaProperty[]{
new DynaProperty("name", String.class),
new DynaProperty("party", Party.class),
new DynaProperty("votes", Long.class)
};
BasicDynaClass politicianClass =
new BasicDynaClass("politician", BasicDynaBean.class, props);
DynaBean politician = politicianClass.newInstance( );
// Set the properties via DynaBean
politician.set( "name", "Tony Blair" );
politician.set( "party", Party.LABOUR );
politician.set( "votes", new Long( 50000000 ) );
一、DynaBean,DynaClass 与 DynaProperty
DynaBean并不是Java中所定义的Bean,而是一种“假”的Bean。因为它并不是通过getXXX和setXXX方法,对XXX属性进行取值和设值的。它通过一个实现了DynaClass接口的类,帮助管理其所有的属性的类别,而自己则管理对XXX属性值的设定和获取。在设值的时候会通过与name对应的DynaProperty对象,检查赋值的类别是否正确。
DynaProperty类描述的是DynaBean中所包含的属性的类型。DynaProperty类有三个属性:属性的名称:name,属性的名称;type,属性的类别;contentType,如果DynaProperty描述的是个容器对象(List或者Map),那么这个contentType就代表这个容器内元素的类别。这个类值得关注的地方是writeObject和readObject方法的实现。它会首先判断自己的type是否是一个primitive的类,如果是,则先写入true标志,再写入对应的primitive类的编号;否则写入false标志,再写入type。因为在调用readObject方法时,如果得出的是primitive类型,则type的值为XXX.TYPE而不是XXX.class。
DynaClass 是一个接口,用来管理DynaBean中所有的DynaProperty属性。
二、BasiceDyanBean 与 BasicDynaClass
BasiceDyanBean 实现自DynaBean接口。它包含一个实现了DynaClass接口的类的对象,和一个用来存放值的HashMap。这个HashMap的key与DynaClass中HashMap的key是一一对应的。
BasicDynaClass 实现了DynaClass接口,以DynaProperty的name为key保存所有这些DynaProperty对象。它通过newInstance方法动态生成实现了DynaBean接口的类的对象;注意这个类是可以动态指定的,如果没有,那么就是默认的BasicDynaBean类。动态指定类是通过反射实现的,程序如下:
//dynaBeanClass为任意的实现了DynaBean接口的类,constructorTypes为这个
//类的构造方法所需要的参数的类型
constructor = dynaBeanClass.getConstructor(constructorTypes);
//constructorValues为构造方法的参数值,实际上它的值为当前的BasicDynaClass
return ((DynaBean) constructor.newInstance(constructorValues));
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/beauty9235/archive/2007/06/16/1654254.aspx
分享到:
相关推荐
Apache DynaBean 是 Apache Commons BeanUtils 库中的一种组件,它提供了一种动态创建和操作 JavaBean 属性的方法。在传统的 JavaBean 中,属性是静态的,即在编译时就已经固定。然而,DynaBean 允许我们在运行时...
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-...
1. **DynaBean接口**:DynaBean是动态Bean的核心接口,它提供了类似于普通JavaBean的属性访问方法,但这些属性可以在运行时动态定义。DynaBean的实现类包括BasicDynaBean、LazyDynaBean、ResultSetIterator和...
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-...
3. **DynaBean**: DynaBean是JavaBean的一个动态版本,它允许在运行时动态添加、删除和修改属性。与标准JavaBean相比,DynaBean更灵活,适合处理属性不确定或需要动态扩展的场景。 4. **DynaClass**: 与Java的`...
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException java.lang.NoClassDefFoundError: org/apache/commons/lang/...
工作中的一个小项目,分享给大家参考,望大家不吝批评指教,本人常年从事JAVA软件开发,有丰富的MINA通信软件开发经验,现在已经有成熟的底层框架(结合了反射、DynaBean、Spring等多种技术),可以实现程序自动对...
Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不敢想的。无论谁的项目,始终一天都会用得上它。我算是后知后觉了,第一回看到它的...4.5 动态Bean 见用DynaBean减除不必要的VO和FormBean
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException java.lang.NoClassDefFoundError: org/apache/commons/...
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections-3.2.2.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons...
5. ** DynaBean **: DynaBean是一种动态Bean,它的属性可以在运行时动态添加、删除或修改,与标准Java Bean相比更具有灵活性。`DynaClass`和`DynaProperty`是支持DynaBean的类,它们提供了动态管理属性的能力。 6. ...
01.JEPLUS新特性(系统功能).mp4 02.JEPLUS新特性(数据源讲解).mp4 ...19.JEPLUS数据库操作DynaBean.mp4 20.Excel导入技巧.mp4 21.定时任务、流程事件灵活运用.mp4 22.对接第三方数据库使用案例.mp4
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException java.lang.NoClassDefFoundError: org/apache/commons/lang/...
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-...
这些类提供了对现有Java Bean的包装,使其符合**DynaBean** 和**DynaClass** 的接口规范。 ##### JDBCDynaClass/ResultSet/ResultSetIterator/RowSet 这些类提供了一种将数据库结果集映射到Java Bean的机制。 ###...
- DynaBean:一个动态的Bean实现,可以处理未知属性。 4. Jakarta Commons数学和时间库 这些库提供了额外的数学和时间处理功能,包括用于时间操作的工具类(例如DateFormatUtils、DateUtils、SimpleDateFormat和...
- DynaBean、DynaClass、DynaProperty:提供了动态创建和操作Bean的能力。 ***mons Collections库提供了对Java集合框架(java.util.*)的一些扩展。包括: - 集合的工具类:如快速集合(FastArrayList等)和扩展...
同样,缺少`ezmorph-1.0.6.jar`会导致`net.sf.ezmorph.Morpher`类无法找到,而`commons-beanutils-1.8.0.jar`对于`DynaBean`类的使用至关重要。 在实际使用中,将Java对象转换为JSON格式,可以通过JSON库提供的API...
**MorphDynaBean**是ezmorph库中的一个类,实现了`org.apache.commons.beanutils.DynaBean`接口。这个接口允许在运行时动态地添加、删除和获取属性,提供了一种灵活的方式来处理和操作对象。`MorphDynaBean`可以接收...
6. **动态Bean**:` DynaBean `接口提供了动态属性的概念,允许在运行时创建和修改属性,增强了灵活性。 BeanUtils-1.8.3版本可能包括以下组件: - `BeanUtils.jar`:包含所有BeanUtils类的JAR文件,用于引入项目中...