- 浏览: 579352 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
a1641693970:
还不错,学习了
BeanUtils使用总结(二)LazyDynaBean -
zjfshowtime:
很好的办法,学习了。
ORA-28001: the password has expired -
ya654277yo:
哦,多谢分享
Apache整合Tomcat后get方式提交中文乱码问题解决 -
foolkeeper:
nice !!
jvm内存参数设定 -
tracy821:
谢谢了,找了好久才找到
关于Spring 声明式事务处理时,throws exception不回滚的问题
LazyDynaBean
它实现一个动态的Bean,可以直接往里面加入属性,作为一个JavaBean一样使用,也可以用上面的BeanUtils或get/set方法进行操作,而不用事先定义一个标准的JavaBean类.
记得在J2ee设计模式中有一种Value Object的模式,用于在MVC各层之间传递数据,避免直接传递大业务对象引起的性能问题,为了避免在项目中出现很多Bean类,在书中提供了一个动态Value Object的实现(通过扩展Map)。
这里LazyDynaBean则可以作为一种更加成熟、稳定的实现来使用。
- //这里使用LazyDynaMap,它是LazyBean的一个轻量级实现
- LazyDynaMap dynaBean1 = new LazyDynaMap();
- dynaBean1.set("foo", "bar"); // simple
- dynaBean1.set("customer", "title", "Mr"); // mapped
- dynaBean1.set("address", 0, "address1"); // indexed
- System.out.println(dynaBean1.get("address",0));
- Map myMap = dynaBean1.getMap(); // retrieve the Map
- System.out.println(myMap.toString());
//这里使用LazyDynaMap,它是LazyBean的一个轻量级实现 LazyDynaMap dynaBean1 = new LazyDynaMap(); dynaBean1.set("foo", "bar"); // simple dynaBean1.set("customer", "title", "Mr"); // mapped dynaBean1.set("address", 0, "address1"); // indexed System.out.println(dynaBean1.get("address",0)); Map myMap = dynaBean1.getMap(); // retrieve the Map System.out.println(myMap.toString());
上面的例子可以看到,它可以在set时自动增加bean的property(既赋值的同时增加Bean中的property),
同时也支持3中类型的property,并且LazyDynaMap还可以导出为map。
对于这个类还有两个重要的Field要注意:
(1) returnnull——指定在get方法使用了一个没有定义过的property时,DynaBean的行为。
//设为ture。若Bean中没有此字段,返回null,默认为false。若Bean中没有此字段,自动增加一个
dynaBean1.setReturnNull(true);
System.out.println(dynaBean1.get("aaa"));//此时返回null
(2) Restricted——指定是否允许改变这个bean的property
//默认为false,允许增删和修改
dynaBean1.setRestricted(true);
dynaBean1.set("test","error");//这里会出错!
通过设置这两个属性,可以防止意外修改DynaBean的property。在设计架构时,你可以在后台从数据表或xml文件自动产生DynaBean,在传到控制层和表示层之前设置上述属性使其Bean结构不允许修改,如此就不可能无意中修改Bean包含的属性……这样既可以享用它的便利,有可以防止由此引入的错误可能。
以下附上上几个 LazyDynaBean 的使用示例:
(1)普通bean
- import java.util.GregorianCalendar;
- import org.apache.commons.beanutils.LazyDynaBean;
- import org.apache.commons.beanutils.BeanUtils;
- public class BeanUtilsExample2 {
- //动态创建属性
- public static void main(String args[]) throws Exception {
- LazyDynaBean hh = new LazyDynaBean();
- hh.set("country", "中国");
- hh.set("city", "北京");
- hh.set("postCode", "100120");
- hh.set("addr", "aaaaaaa");
- LazyDynaBean bb = new LazyDynaBean();
- bb.set("phone", "home", "11011011");
- bb.set("phone", "office", "111111");
- bb.set("email", "sh@126.com");
- bb.set("address", 0, hh);
- bb.set("birthDate", new GregorianCalendar(1990, 3, 29).getTime());
- LazyDynaBean tt = new LazyDynaBean();
- tt.set("userId", new Long(8888888));
- tt.set("gggg", "施杨");
- tt.set("password", "sgsgsgsg");
- tt.set("dddd", bb);
- System.out.println(BeanUtils.getProperty(tt, "gggg"));
- System.out.println(BeanUtils.getProperty(tt, "dddd.birthDate"));
- System.out.println(BeanUtils.getProperty(tt,
- "dddd.address[0].addr"));
- System.out
- .println(BeanUtils.getProperty(tt, "dddd.phone(office)"));
- }
- }
import java.util.GregorianCalendar; import org.apache.commons.beanutils.LazyDynaBean; import org.apache.commons.beanutils.BeanUtils; public class BeanUtilsExample2 { //动态创建属性 public static void main(String args[]) throws Exception { LazyDynaBean hh = new LazyDynaBean(); hh.set("country", "中国"); hh.set("city", "北京"); hh.set("postCode", "100120"); hh.set("addr", "aaaaaaa"); LazyDynaBean bb = new LazyDynaBean(); bb.set("phone", "home", "11011011"); bb.set("phone", "office", "111111"); bb.set("email", "sh@126.com"); bb.set("address", 0, hh); bb.set("birthDate", new GregorianCalendar(1990, 3, 29).getTime()); LazyDynaBean tt = new LazyDynaBean(); tt.set("userId", new Long(8888888)); tt.set("gggg", "施杨"); tt.set("password", "sgsgsgsg"); tt.set("dddd", bb); System.out.println(BeanUtils.getProperty(tt, "gggg")); System.out.println(BeanUtils.getProperty(tt, "dddd.birthDate")); System.out.println(BeanUtils.getProperty(tt, "dddd.address[0].addr")); System.out .println(BeanUtils.getProperty(tt, "dddd.phone(office)")); } }
(2)、连接Mysql数据库
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.Iterator;
- import org.apache.commons.beanutils.DynaBean;
- import org.apache.commons.beanutils.ResultSetDynaClass;
- public class BeanUtilsExample3 {
- public static void main(String args[]) throws Exception {
- Connection conn = getConnection();
- PreparedStatement ps = conn
- .prepareStatement("select id,title,time from guestbook2 order by id desc");
- ResultSet rs = ps.executeQuery();
- ResultSetDynaClass rsdc = new ResultSetDynaClass(rs);//重点,二次封装,对连接对象有依赖
- Iterator itr = rsdc.iterator();
- while (itr.hasNext()) {
- DynaBean bean = (DynaBean) itr.next();
- System.out.print(bean.get("id") + "\t");
- System.out.print(bean.get("title") + "\t");
- System.out.println(bean.get("time"));
- }
- conn.close();
- }
- private static Connection getConnection() {
- String url = "jdbc:mysql://localhost:3306/guestbook";
- String username = "root";
- String password = "hicc";
- Connection conn = null;
- try {
- Class.forName("com.mysql.jdbc.Driver");
- conn = DriverManager.getConnection(url, username, password);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return conn;
- }
- }
import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Iterator; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.ResultSetDynaClass; public class BeanUtilsExample3 { public static void main(String args[]) throws Exception { Connection conn = getConnection(); PreparedStatement ps = conn .prepareStatement("select id,title,time from guestbook2 order by id desc"); ResultSet rs = ps.executeQuery(); ResultSetDynaClass rsdc = new ResultSetDynaClass(rs);//重点,二次封装,对连接对象有依赖 Iterator itr = rsdc.iterator(); while (itr.hasNext()) { DynaBean bean = (DynaBean) itr.next(); System.out.print(bean.get("id") + "\t"); System.out.print(bean.get("title") + "\t"); System.out.println(bean.get("time")); } conn.close(); } private static Connection getConnection() { String url = "jdbc:mysql://localhost:3306/guestbook"; String username = "root"; String password = "hicc"; Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.Iterator;
- import org.apache.commons.beanutils.DynaBean;
- import org.apache.commons.beanutils.RowSetDynaClass;
- public class BeanUtilsExample4 {
- public static void main(String args[]) throws Exception {
- Connection conn = getConnection();
- PreparedStatement ps = conn
- .prepareStatement("select id,title,time from guestbook2 order by id desc");
- ResultSet rs = ps.executeQuery();
- RowSetDynaClass rsdc = new RowSetDynaClass(rs);
- //重点,与ResultSetDynaClass的区别
- conn.close();//重点,关闭连接后仍能读取
- Iterator itr = rsdc.getRows().iterator();
- while (itr.hasNext()) {
- DynaBean bean = (DynaBean) itr.next();
- System.out.print(bean.get("id") + "\t");
- System.out.print(bean.get("title") + "\t");
- System.out.println(bean.get("time"));
- }
- }
- private static Connection getConnection() {
- String url = "jdbc:mysql://localhost:3306/guestbook";
- String username = "root";
- String password = "hicc";
- Connection conn = null;
- try {
- Class.forName("com.mysql.jdbc.Driver");
- conn = DriverManager.getConnection(url, username, password);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return conn;
- }
- }
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Iterator; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.RowSetDynaClass; public class BeanUtilsExample4 { public static void main(String args[]) throws Exception { Connection conn = getConnection(); PreparedStatement ps = conn .prepareStatement("select id,title,time from guestbook2 order by id desc"); ResultSet rs = ps.executeQuery(); RowSetDynaClass rsdc = new RowSetDynaClass(rs); //重点,与ResultSetDynaClass的区别 conn.close();//重点,关闭连接后仍能读取 Iterator itr = rsdc.getRows().iterator(); while (itr.hasNext()) { DynaBean bean = (DynaBean) itr.next(); System.out.print(bean.get("id") + "\t"); System.out.print(bean.get("title") + "\t"); System.out.println(bean.get("time")); } } private static Connection getConnection() { String url = "jdbc:mysql://localhost:3306/guestbook"; String username = "root"; String password = "hicc"; Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }
发表评论
-
BCD Conversion in java
2016-03-31 23:39 1851/** * Copyright 2010 Firat ... -
在java代码中获取JVM参数
2014-04-08 11:16 14271近日关注性能调优,关注JMX,发现java.lang.man ... -
GC日志分析配置与工具
2013-05-08 11:32 1370-verbose:gc(打印GC日志) -Xloggc:( ... -
java 实现HTTP PROXY
2012-12-06 17:21 7593日常应用中使用过很多次代理,主要停留在配置级别。 近期无意看 ... -
运行时获取方法调用堆栈信息(java)
2012-09-14 10:53 9706前几日系统流程回调时,一个方法莫名其妙被调用,无法定位调用点。 ... -
EL表达式在tomcat7.0下的new关键字不能使用
2012-08-24 17:25 4078最近生产系统部署个小应用,服务器选型tomcat7.0,一直运 ... -
xfire设置连接超时问题
2012-08-01 17:25 5161近期使用xfire作为客户端访问WS,结果因为目标主机假死 ... -
将多个对象写到一个文件
2012-07-20 17:08 1261来看一段ObjectOutputStream构造方法的源代码 ... -
多线程学习笔记:synchronized
2011-12-15 17:32 849Java语言的关键字,当它 ... -
(转)使用 Eclipse Memory Analyzer 检测内存泄漏问题
2011-12-14 18:10 1156本文是关于在开发 Talend RCP 过程中碰 ... -
多线程学习笔记:thread 线程中的sleep()、wait()、yield()、join()
2011-12-14 17:46 12891.sleep()方法 在指定时间内让当前正在执行的线程暂 ... -
jconsole监控JVM
2011-12-12 17:46 1576本地监控: Jconsole [processed] ... -
Java 6 JVM参数选项大全(中文版)
2011-11-03 15:19 1050本文 是基于最新的SUN官方 文档Java SE 6 ... -
Java实现远程屏幕监视
2011-10-19 17:40 742Robot robot = new Robot(); / ... -
java线程池 常用方法
2011-09-24 22:52 1398在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于 ... -
JAVA 调用Web Service的方法
2011-08-15 10:28 11631.使用HttpClient 用到的jar文件:comm ... -
JVM监控工具--jvmstat
2011-08-02 15:42 1286首先就是下载这个工具链接:http://java.sun.co ... -
java性能优化
2011-07-18 15:19 1116一、避免在循环条件中 ... -
jvm内存参数设定
2011-07-17 20:30 1393在开发java应用时经常出 ... -
怎样解决Java内存泄漏
2011-07-15 11:38 1467解决Java 内存泄漏 Java内存泄漏是每个 ...
相关推荐
commons-beanutils使用工具包
本篇文章将深入探讨如何使用BeanUtils库,特别是通过它将Map对象转换为JavaBean的过程。 Apache Commons BeanUtils的核心功能是通过反射机制来操作JavaBean的属性。在Java编程中,JavaBean是一种遵循特定规范的类,...
以下是一个简单的使用BeanUtils的例子: ```java import org.apache.commons.beanutils.BeanUtils; public void registerUser(User user, HttpServletRequest request) { try { // 将请求参数填充到User对象 ...
总结来说,Apache Commons BeanUtils是Java开发中的重要工具,通过深入研究其源码,我们可以了解到JavaBean模式的实现细节,以及如何利用反射和类型转换来增强代码的灵活性。同时,源码中的设计模式和异常处理策略也...
在本文中,我们将深入探讨`commons-beanutils-1.9.4`这个版本,了解其核心功能、使用场景以及如何在项目中集成和应用。 Apache Commons BeanUtils库的主要目标是简化JavaBean对象的属性访问。它通过提供一系列静态...
总结来说,Apache Commons BeanUtils 1.8.0是处理JavaBean属性的强大工具,它的出现极大地简化了Java对象的属性操作,提高了代码的可读性和可维护性。配合`commons-logging.jar`,它提供了灵活的日志记录功能,使得...
赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...
总结来说,Apache Commons BeanUtils 1.8.3 API是一个强大且易用的工具,它简化了Java Bean的操作,使开发者能更专注于业务逻辑而不是基础的属性设置。无论是在大型企业级应用还是小型项目中,这个库都是一个不可或...
本篇文章将深入探讨Apache Commons BeanUtils的核心功能、使用场景以及如何有效地利用这个库来提升代码的效率和可读性。 Apache Commons BeanUtils是Apache软件基金会开发的一个开源项目,它是Apache Commons项目的...
Apache BeanUtils库是Java开发中的...不过,由于BeanUtils使用反射,可能存在一定的性能损耗,因此在性能敏感的应用中需要谨慎使用。同时,由于其依赖于JavaBeans规范,对于非JavaBeans对象的操作可能需要额外的适配。
总结来说,Apache Commons BeanUtils是Java开发中的得力助手,尤其在网络框架的构建中,其强大的属性操作和类型转换功能大大提升了开发效率和代码质量。通过熟练掌握BeanUtils的使用,开发者可以更专注于业务逻辑,...
总的来说,"commons-beanutils-1.8.2-src"官方源文件包是学习Java Bean操作的宝贵资源,通过研究源代码,开发者不仅可以掌握BeanUtils的使用,还能进一步提升对Java反射和类型转换的理解,从而提高开发效率和代码...
2. **安全问题:** BeanUtils使用反射机制,如果属性是私有的,需要谨慎使用,因为这可能会暴露对象的内部状态。 3. **性能考虑:** 尽管BeanUtils提供了很多便利,但频繁使用反射可能会带来性能损失,对于性能敏感...
BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。使用第三方工具,需要导入jar包:
- **安全性增强**:对于旧版本的安全漏洞,新版本可能会进行修复,确保在使用过程中的安全性。 在实际项目中,升级到`commons-beanutils-1.8.3`可能会带来更好的性能和稳定性,但也需要注意检查与现有代码的兼容性...
总结来说,Apache Commons BeanUtils是Java开发中的得力助手,它极大地提高了处理JavaBean对象的效率,减少了代码的冗余,同时也为处理复杂的数据操作提供了便利。通过使用这个库,开发者可以更专注于业务逻辑,而非...
总结来说,Apache Commons BeanUtils 1.8.0是一个强大的Java Bean操作库,它简化了属性的读写操作,提供了对象复制、属性批量设置等高级功能,并且源码开放,有助于开发者提升技能。在Java开发中,尤其是在需要处理...
本文将深入探讨BeanUtils的核心功能及使用方法。 BeanUtils是Apache Commons项目的一部分,它的主要目标是提供一套便捷的工具方法,用于处理JavaBean对象。JavaBean是一种遵循特定设计规范的Java类,通常包含公共的...