reflect的一个使用的例子---------------自动赋值
2005-05-07 14:16
549 查看
现在java的web application一般都有数据库参与,
在修改和新增的时候,要保存字段,
如果让我们都公共来写这些的话,是比较麻烦的。
为什么不让程序来做?
怎么让程序来做?
Reflect提供实现方案。
第一,要做一配置文件,例如:
<auto-property>
<anto class="test.Person">
<operation name="create">
<property name="name" />
<property name="email" />
<property name="sex" />
<property name="address" />
</operation>
<operation name="modify">
<property name="email" />
<property name="sex" />
<property name="address" />
</operation>
.......
</auto>
</auto-property>
auto 标签标明需要自动赋值字段的类,operation指名要进行赋值的时机,property表示要进行赋值的字段。
第二,写reflect的实现。
这里主要是一个方法
public Object convert(Map params,Class clazz);
params:参数的名字和值
clazz:使用到的实体类的class
这里提供一个参考实现:
public Object convert(Map params,Class clazz,Set properties) throws Exception{
BeanInfo info = Introspector.getBeanInfo(clazz);
PropertyDescriptor [] ps = info.getPropertyDescriptors();
Object toReturn = clazz.newInstance();
for(int i=0;i<ps.length;i++){
PropertyDescriptor p = ps;
if(properties.contains(p.getName())){
//判断参数的类型
//8种原始类型
//和数种经常采用的类型(如 String java.sql.Date 等)
//这里为了简单说明问题,采用String类型
Object[]pvalue = new Object[1];
//假定需要的参数都能传入
pvalue[0] = params.get(p.getName());
p.getWriteMethod().invoke(toReturn,pvalue);
}
}
return toReturn;
}
该方法还不能直接使用---除非都是用String类型的,否则,应该对那些数据类型进行定义。
第三,解析xml配置文件,并调用实现。
使用之前,我们需要对该xml文件进行解析并缓存(缓存原因?每次都解析是不是很浪费?)。
一般,我们使用Servlet或action等,现在就拿servlet作说明。
HttpServletRequest可以获得所有参数和值,确保参数的字段和属性字段的一致性(这样做起来比较简单,代码量小)。
获得字段的列表后,使用reflect的实现的返回值并进行Cast,就直接能进行数据库操作了。
在修改和新增的时候,要保存字段,
如果让我们都公共来写这些的话,是比较麻烦的。
为什么不让程序来做?
怎么让程序来做?
Reflect提供实现方案。
第一,要做一配置文件,例如:
<auto-property>
<anto class="test.Person">
<operation name="create">
<property name="name" />
<property name="email" />
<property name="sex" />
<property name="address" />
</operation>
<operation name="modify">
<property name="email" />
<property name="sex" />
<property name="address" />
</operation>
.......
</auto>
</auto-property>
auto 标签标明需要自动赋值字段的类,operation指名要进行赋值的时机,property表示要进行赋值的字段。
第二,写reflect的实现。
这里主要是一个方法
public Object convert(Map params,Class clazz);
params:参数的名字和值
clazz:使用到的实体类的class
这里提供一个参考实现:
public Object convert(Map params,Class clazz,Set properties) throws Exception{
BeanInfo info = Introspector.getBeanInfo(clazz);
PropertyDescriptor [] ps = info.getPropertyDescriptors();
Object toReturn = clazz.newInstance();
for(int i=0;i<ps.length;i++){
PropertyDescriptor p = ps;
if(properties.contains(p.getName())){
//判断参数的类型
//8种原始类型
//和数种经常采用的类型(如 String java.sql.Date 等)
//这里为了简单说明问题,采用String类型
Object[]pvalue = new Object[1];
//假定需要的参数都能传入
pvalue[0] = params.get(p.getName());
p.getWriteMethod().invoke(toReturn,pvalue);
}
}
return toReturn;
}
该方法还不能直接使用---除非都是用String类型的,否则,应该对那些数据类型进行定义。
第三,解析xml配置文件,并调用实现。
使用之前,我们需要对该xml文件进行解析并缓存(缓存原因?每次都解析是不是很浪费?)。
一般,我们使用Servlet或action等,现在就拿servlet作说明。
HttpServletRequest可以获得所有参数和值,确保参数的字段和属性字段的一致性(这样做起来比较简单,代码量小)。
获得字段的列表后,使用reflect的实现的返回值并进行Cast,就直接能进行数据库操作了。
相关文章推荐
- 微信小程序例子——使用画布组件绘制一个会自动旋转的正方体
- 一个自动填充( autocomple)的例子(使用JQuery Cool Auto-Suggest)
- 一个使用MSBuild Task自动编译部署的例子
- 一个使用MSBuild Task自动编译部署的例子
- 微信小程序例子——使用画布组件绘制一个会自动缩放的正方体
- 《ajax基础教程》里一个自动补全的例子
- VC++中使用Zlib的一个例子
- 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)
- 使用eclipse创建JPA-->:附带一个简单的例子
- 一个使用 seq_file 接口的 proc_fs 例子
- 一个Excel导入SQL server的例子(分别使用游标、CTE、master..spt_values实现)
- 使用openssl中的加密函数AES、RC4、RSA对文件加密的一个例子
- 一个关于jqGrid使用的小例子(行按钮)
- jquery live 函数使用的一个例子,和一些帮助文档
- 一个使用spring的最简单的例子。
- 一个yield使用例子
- 一个使用GridView显示数据,并且可以进行添加、修改、删除操作的例子
- 在网页中使用 Agent 地一个例子
- MSYS是一个小型的GNU环境,包括基本的bash,make等等,与Cygwin大致相当(没有它,就不能使用mingw自动编译)
- 一个使用Intel® Parallel Studio优化Minibench的例子