在Struts中非常典型的特点就是使用了ActionForm来搜集表单数据,可是搜集到的表单数据所有都是String类型的。假设我们直接拿来使用我们会面临一个非常麻烦的问题就是频繁的类型装换。

Struts中使用了BeanUtils来使我们从繁重的体力劳动中解脱出来。

BeanUtils的工作原理:

我们通过一个简单的样例来了解一下他最主要的使用,首先建立一个实体类Student

package com.tgb.struts;
import java.sql.Date;
public class Student {//姓名private String name;//年龄private int age;//生日private Date birth;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth = birth;}
}

编写測试类

package com.tgb.struts;
import org.apache.commons.beanutils.BeanUtils;
import junit.framework.TestCase;
public class Demo2Test extends TestCase {public void test01() throws Exception {// 1.载入类Class clss = Class.forName("com.tgb.struts.Student");// 2.创建Bean对象Student st = (Student) clss.newInstance();// 3.通过BeanUtils给对象属性赋值BeanUtils.setProperty(st, "name", "L。");// 4.输出对象属性值String str = BeanUtils.getProperty(st, "name");System.out.println(str);}
}
    执行測试类我们会发如今控制台上的输入结果为“L。”也就是我们想要的结果。

这个好像看上去非常easy。BeanUtils帮我们做了什么呢:

BeanUtils的setProperty(object,name,value)方法须要的參数各自是

Object=载入类的对象

Name=类属性的名称

Value=所赋的值;

BeanUtils的getProperty(object,name)方法的返回值是String类型。所以能够直接输出。

    假设我们自己写我们怎样做,首先我们须要知道Student类的属性,以及属性的类型。

然后把我们想要赋值到相应属性的数据强转为可用的类型并赋值,而使用BeanUtils我们仅仅须要知道他的属性名就能够了。

数据的强转它已经帮我们做好了。

    BeanUtils还有一个经常使用的方法就是copyProperties()
       假设你有两个具有非常多同样属性的JavaBean,一个非经常见的情况就是Struts里的PO对象(持久对象)和相应的ActionForm。比如Teacher和TeacherForm。我们通常会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似以下的语句对属性逐个赋值:
//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象
Teacher teacher=new Teacher();
//赋值
teacher.setName(teacherForm.getName());
teacher.setAge(teacherForm.getAge());
teacher.setGender(teacherForm.getGender());
teacher.setMajor(teacherForm.getMajor());
teacher.setDepartment(teacherForm.getDepartment());//持久化Teacher对象到数据库
HibernateDAO=;
HibernateDAO.save(teacher);

而使用BeanUtils后,代码就大大改观了,例如以下所看到的:

//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象
Teacher teacher=new Teacher();
//赋值
BeanUtils.copyProperties(teacher,teacherForm);
//持久化Teacher对象到数据库
HibernateDAO=;
HibernateDAO.save(teacher);

假设Teacher和TeacherForm间存在名称不同样的属性,则BeanUtils不正确这些属性进行处理,须要程序猿手动处理。比如Teacher包括modifyDate(该属性记录最后改动日期。不须要用户在界面中输入)属性而TeacherForm无此属性,那么在上面代码的copyProperties()后还要加上一句:

teacher.setModifyDate(new Date());
    当然以上是BeanUtils的最主要的使用,但究竟他是怎样工作的呢。
    我们首先看一下用于装换Integer的IntegerConverter类的convert方法:
public Object convert(Class type, Object value) {//首先推断是否为空,为空抛出异常if (value == null) {if (useDefault) {return (defaultValue);} else {throw new ConversionException("No value specified");}}//推断是否为Integer的类型,假设是直接返回,可是对于我们从表单获取的数据,总是String类型的。//这个功能往往是在实体间赋值的时候使用。

//假设不是实体类型的就装换为实体返回。 if (value instanceof Integer) { return (value); } try { return (new Integer(value.toString())); } catch (Exception e) { if (useDefault) { return (defaultValue); } else { throw new ConversionException(e); } } }

事实上代码非常好理解。其它的类型装换也都基本上相似。事实上就是对我们繁杂工作的一个简单的封装。在一般的写bean组件的时候,都必需要写setter和getter方法,当然假如我们事先已经知道bean的相关属性和方法,写bean是比較简单的,可是组件太多的时候,反复编写常常是枯燥乏味令人厌烦的。但当有些时候我么需要调用动态对象的属性的时候。我们应该怎么来设定和获取对象的属性呢?BeanUtils就能够帮助我们为了解决这个问题。

版权声明:本文博主原创文章,博客,未经同意不得转载。

Struts1——离BeanUtils看struts其原理1相关推荐

  1. c++ socket线程池原理_一篇文章看懂 ThreadLocal 原理,内存泄露,缺点以及线程池复用的值传递问题...

    编辑:业余草来源:https://www.xttblog.com/?p=4946 一篇文章看懂 ThreadLocal 原理,内存泄露,缺点以及线程池复用的值传递问题. ThreadLocal 相信不 ...

  2. 一个动画看懂网络原理之CSMA/CD的工作原理

    一个动画看懂网络原理之CSMA/CD的工作原理 CSMA/CD协议是以太网传输中的一个重要协议,由于线路中同一时间只能允许一台电脑发送信息,否则各计算机之间就会产生干扰,为了解决这个问题,采用了CSM ...

  3. 计算机网络原理fin,一个动画看懂网络原理之TCP建立和释放过程

    一个动画看懂网络原理之TCP建立和释放过程 一.TCP的概念 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.T ...

  4. 分布式一致性协议三部曲-从paxos幽灵复现看Raft实现原理

    幽灵复现 Mutlti-Paxos下存在Leader切换情况,因而可能出现下面的场景 第一轮中A被选为 Leader,写下了 1-10 号日志,其中 1-5 号日志形成了多数派,并且已给客户端应答,而 ...

  5. Struts工作原理及其优缺点详解

    2019独角兽企业重金招聘Python工程师标准>>> 一.Struts工作原理 MVC即Model-View-Controller的缩写,是一种常用的设计模式.MVC 减弱了业务逻 ...

  6. 发信息服务器恢复,手机短信删除了怎么恢复?看完恢复原理你就懂了!

    原标题:手机短信删除了怎么恢复?看完恢复原理你就懂了! 手机短信删除了怎么恢复?随着科技时代的进步,我们在线交流的方式越来越多,但很多重要的事情,我们还是会以短信的形式发送,比如面试通知.快递取件码等 ...

  7. 2017春运抢票软件哪个好,教你看懂刷票原理!| 宅客周刊

    2017年第一天,当你从跨年的宿醉中逐渐清醒.你可能意识到自己搬砖的薪水还不够发几个红包,你可能意识到而十多天后回家的票还没抢到. 没问题,本期雷锋网(公众号:雷锋网)宅客周刊就给你终极解决方案.如何 ...

  8. 计算机网络中的网桥,一个动画看懂网络原理之网桥的工作原理

    一个动画看懂网络原理之网桥的工作原理 一.网桥是干什么的 网桥工作在OSI参考模型数据链路层的两端口或多端口二层网络设备,是用来连接不同网段的存储转发设备.使用网桥能扩展网络的距离或范围,还可以提高网 ...

  9. 计算机网络中 中继器的作用是,一个动画看懂网络原理之中继器工作过程

    一个动画看懂网络原理之中继器工作过程 我们在学习计算机网络技术时,涉及到网络设备时,书本上往往在介绍网卡之后,就会给大家介绍中继器,那么中继器是什么,它的作用是什么,它的工作过程又是怎样的,下面就这些 ...

最新文章

  1. Python函数作为参数传递给函数
  2. 服务器win2008修复安装,Win2008 R2迁移实战之迁移工具安装
  3. [Trie] Luogu P2992 [USACO08DEC]秘密消息Secret Message
  4. 什么是网络光端机?网络光端机工作原理及功能介绍!
  5. linux定向查日志_linux日志查找技巧
  6. 6410的系统时钟设置(上)---6410时钟控制逻辑框架分析
  7. (最完美)小米手机5s的USB调试模式在哪里打开的方法
  8. 取 java 程序运行的路径_获取Java程序运行的路径 | 获取当前jar包的路径
  9. php用vscode开发,VSCode PHP开发
  10. linux6.8设置中文界面,Linux下安装多媒体中心 Kodi 18.8 新版本并设置中文界面
  11. 思科CCNP在OSPF路由协议中的五类LSA是什么
  12. Mybatis(1)----------简介及第一开发程序
  13. 商业智能和分析软件市场现状及发展趋势分析-
  14. 已知直线方程,计算直线对应的向量
  15. mysql workbench安装配置_Mysql WorkBench安装配置图文教程
  16. 路由器无法登上管理IP地址
  17. 计算机控制台程序,什么是电脑控制台,是DOS设定吗?
  18. win10最简单定时关机命令
  19. 一篇文章带你详解 HTTP 协议
  20. 整洁架构读书笔记(Clean Architecture)

热门文章

  1. SpringBoot 精通系列-如何优雅地使用Mybatis的XML配置
  2. 分布式系统架构实战demo:SSM+Dubbo
  3. 环境搭建:Windows系统下Nacos集群搭建
  4. 什么是Knative
  5. 关于Zuul的几个问题
  6. JAVA IO基本知识
  7. springboot项目整个的启动流程
  8. 日志服务与SIEM(如Splunk)集成方案实战 1
  9. 6.10. stack-manager
  10. 输入输出流——字符流部分