`
julyboxer
  • 浏览: 222252 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

利用invoke方法自动绑定JavaBean

    博客分类:
  • java
阅读更多
mport java.lang.reflect.Method;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class BeanBind {
    
     public static Log log = LogFactory.getLog(BeanBind.class);
    // choose the appropriate method to invoke and set the class properity
     
    public static Method select(Method[] method, String name, Class clz) {
        Method methods=null;
        for (int i = 0; i < method.length; i++) {
            int a = method[i].getName().length();
            if (method[i].getName().substring(3, a).equalsIgnoreCase(name)
                    && (method[i].getName().startsWith("set"))) {
                log.info("get the appropriate method: "+clz.getClass()+"."+method[i].getName());
               
                return method[i];

            }   
           
        }
        System.out.println("check");
        return null;

    }
    //get the data from request and bind into Class clz
    public static Object bind(Class clz,HttpServletRequest request) throws InstantiationException,
            IllegalAccessException {

        java.lang.reflect.Field[] field = clz.getDeclaredFields();
        Method[] method = clz.getDeclaredMethods();
        Object obj = clz.newInstance();
        System.out.println("field.length: "+field.length);
       
        for (int i = 0; i < field.length; i++) {
           
            String parser = null;
            Method meod = null;
            String type = field[i].getType().getSimpleName();
            String str = field[i].getName();
            parser=request.getParameter(str);
            meod = select(method, str, clz);
            log.info("method: "+meod.getName()+ "  bind the properity: "+str+"  value :  "+parser);
           
            if (type.equalsIgnoreCase("String")) {
               
               
                try {
                    Object[] arg = { parser };
                    System.out.println("String");
                    meod.invoke(obj, arg);
                   

                } catch (Exception e) {
                    log.error("String value: "+parser+ "invoke error: "+clz.getName());
                   
                }

            } else if (type.equalsIgnoreCase("Integer")) {
               
               
                try {                 
                   Object[] arg = { Integer.valueOf(parser) };
                    meod.invoke(obj, arg);
                   
                } catch (Exception e) {
                    log.error("Integer value: "+parser+ "invoke error: "+clz.getName());
                }

            } else if (type.equalsIgnoreCase("Double")) {

               
               
                try {
                   
                    Object[] arg = { Double.valueOf(parser) };                   
                    meod.invoke(obj, arg);
                   

                } catch (Exception e) {
                    log.error("Double value: "+parser+ "invoke error: "+clz.getName());
                }

            } else if (type.equalsIgnoreCase("Float")) {

               
               
                try {
                    Object[] arg = { Float.valueOf(parser) };                   
                    meod.invoke(obj, arg);
                   

                } catch (Exception e) {
                    log.error("Float value: "+parser+ "invoke error: "+clz.getName());
                }

            } else if (type.equalsIgnoreCase("date")) {
               
               
                try {
                    Date date = new Date(parser);
                    Object[] arg ={ date };                    
                    meod.invoke(obj, arg);
                   
                } catch (Exception e) {
                    log.error("Date value: "+parser+ "invoke error: "+clz.getName());

                }

            }
            System.out.println("ahaha");

        }
        return obj;

    }

}
具体的调用方法如下.相应的值是从HttpRequest (Form表单)获取 关于验证方法可以在JavaBean中自己定义一个validator方法.然后动态调用
User user=new User();
   Class clzs=user.getClass();
user=(User) BeanBind.bind(clzs, request);
分享到:
评论
1 楼 yushanuu 2009-02-15  
很棒啊 ,先收了

相关推荐

    JavaBean 方法的动态调用

    动态调用方法在许多场景下都非常有用,比如在框架开发、数据绑定、代码生成以及处理未知类型的数据时。然而,反射也有其潜在的风险,如性能损耗和安全性问题,因此在使用时需要谨慎。 在设计模式方面,JavaBean常常...

    Desktop_javaBean转换Map工具_

    将JavaBean转换为Map是一种常见的需求,特别是在处理数据绑定、JSON序列化或者存储时。标题“Desktop_javaBean转换Map工具_”暗示了这是一个方便的工具或代码片段,用于快速将JavaBean实例转换为Map对象。 描述中...

    用反射实现向不同简单JavaBean填充值的实现代码

    通过上述步骤,我们可以编写一个通用的工具方法,接受类名、属性名和值作为参数,利用反射填充JavaBean的属性。这样的实现对于处理大量相似对象的初始化或数据绑定场景非常有用,例如在数据持久化、JSON序列化/反...

    JavaBean和Map转换封装类的方法

    在Java编程中,JavaBean和Map之间的转换是常见的操作,特别是在数据绑定和数据处理的场景。下面我们将详细探讨如何实现这种转换以及相关的封装类方法。 首先,JavaBean是一种符合特定规范的Java类,通常用于封装...

    Java反射机制与动态代理

    - `ReflectTester`类的`copy()`方法利用反射创建了一个与输入对象相同类型的副本,并将属性值复制过去。这是通过获取属性的`get`和`set`方法实现的,适用于简单的JavaBean。 4. **使用反射的注意事项** - 性能...

    java反射技术讲解

    在`ReflectTester`类中,`copy()`方法利用反射来复制一个对象的所有属性到新创建的同类型对象中,这展示了如何使用反射访问和设置JavaBean的属性,前提是JavaBean的属性有对应的getter和setter方法。 总的来说,...

    Java通过PropertyDescriptor反射调用set和get方法

    它首先获取对象`obj`的类,然后调用`getPropertyDescriptor()`获取对应的`PropertyDescriptor`,接着从`PropertyDescriptor`中获取`set`方法,最后使用`invoke()`方法调用`set`方法,将`value`值设置到对象的属性上...

    Axis高级编程

    - 重写`invoke`方法以添加特定的处理逻辑。 - 在Axis配置文件中注册Handler。 4. **应用场景** - 安全认证:实现身份验证和授权机制。 - 日志记录:记录服务调用的详细信息。 - 性能优化:实现缓存或其他优化...

    Java内省实例解析

    通过内省,开发者可以轻松地实现对JavaBean属性的自动化操作,提高代码的可维护性和可扩展性。 总的来说,Java内省提供了一种强大的工具,让我们能够在运行时动态地探索和操作Java对象,特别是对于符合JavaBean规范...

    Java 内省introspector相关原理代码解析

    最后,使用`Method.invoke()`方法执行这些方法,实现了动态地设置和获取属性值。 Apache Commons BeanUtils库进一步简化了内省操作。在示例中,虽然没有直接使用,但`BeanUtils`类提供了便捷的API来复制属性、设置...

    基于jacob和freeMarker的word导出参考文件

    6. **利用jacob转换为Word**:使用Jacob的`ActiveXComponent`对象,例如`com.jacob.com.Dispatch`,打开一个Word应用实例,然后调用`com.jacob.activeX.ActiveXComponent.invoke`方法,将生成的Word内容写入一个新的...

    经典的问题

    - 静态内部类与外部类之间没有绑定关系,可以独立使用,不需要创建外部类的对象。 **8. 构造代码块和构造函数的区别** - **构造代码块**: 在每次创建对象时都会执行的一段代码,用于初始化对象的属性。 - **构造...

    Java 内省(Introspector)深入理解

    JavaBean遵循特定的编程约定,包括具有公有无参构造函数、属性由私有变量表示,并提供对应的getter和setter方法。如示例中的`UserInfo`类,它包含`userId`, `userName`, `age`和`emailAddress`等属性,每个属性都有...

    JSF程序设计

    5. **Invoke Application**:调用后端业务方法。 6. **Render Response**:渲染响应,返回给客户端。 ### 六、JSF事件处理 JSF允许定义事件监听器,处理用户交互或组件间通信。事件通过事件队列传播,允许组件根据...

    jsf经典入门

    1. **组件**:JSF提供了丰富的UI组件库,如按钮、文本框、表单等,这些组件可以直接在页面上使用,并且可以方便地进行数据绑定和事件处理。 2. **Facelets**:Facelets是JSF推荐的视图表示技术,它是一种XML-based...

    Struts2.0框架技术详解

    - **Spring MVC**:基于Spring框架,提供了丰富的特性,如自动绑定请求参数到模型对象、灵活的结果视图渲染等。 - **Struts2**:基于WebWork框架发展而来,具有强大的插件系统和丰富的标签库。 - **Ruby on Rails**...

Global site tag (gtag.js) - Google Analytics