java反射应用

反射

使用JAVA反应进行两个vo有相同字段名字进行子转换:

@Test    public void doTransTest() {        A a= new A();        A.setC(111L);         B b= new B();        doTrans(a, b);    }     /**    *@param sour 来源vo    *@param dest 待转换vo    */    public void doTrans(Object sour, Object dest) {        if (sour == null) {            dest = null;            return;        }    //反射原理应用        Class<?> sourceClass = sour.getClass();        Class<?> destClass = dest.getClass();        for (Field field : sourceClass.getDeclaredFields()) {             String fieldName = field.getName();            Object value;             if (fieldName.equals("serialVersionUID")) {                continue;            }             try {                PropertyDescriptor propertyDescriptor = new PropertyDescriptor(fieldName, sourceClass);                value = propertyDescriptor.getReadMethod().invoke(sour);            } catch (Exception e) {                //log                continue;            }             if (value == null) {                continue;            }            try {                PropertyDescriptor propertyDescriptor = new PropertyDescriptor(fieldName, destClass);                propertyDescriptor.getWriteMethod().invoke(dest, value);            } catch (Exception e) {                //log                continue;            }        }    }

SpringIOC反射的应用:

 /**     * springIOC和反射test     *     * @throws Exception     */    @Test    public void reflexTest() throws Exception {         /**         * 第一步,springIOC解析如下bean         *  <bean id="cartBean" class="com.mmall.pojo.Cart"></bean>         */        //解析bean字符串xxxxx        String beanId = "cartBean";        String beanClass = "com.mmall.pojo.Cart";        Class<?> cls = Class.forName(beanClass);        Object object = cls.newInstance();        //模拟spring容器        Map container = Maps.newHashMap();        //bean注入spring容器,实例化成功        container.put(beanId, object);          /**         * 第二步:模拟ref注入         *      <bean id="cartBean" class="com.mmall.pojo.Cart"></bean>         *          <property name="user" ref="userBean"></property>         *      <bean>         */        //初始化refBean(userBean)        String beanIdUser = "cartBean";        String beanClassUser = "com.mmall.pojo.User";        Class<?> clsUser = Class.forName(beanClassUser);        Object objectUser = clsUser.newInstance();        //并注入spring容器        container.put(beanIdUser,objectUser);         //得到cartBean的setUser方法        String setUserName = "setUser";        Object paramBean = container.get(beanIdUser);        //cls是cart对象        Method setter = cls.getMethod(setUserName, objectUser.getClass());        //注入set方法        setter.invoke(object, paramBean);    }

以上就是java反射应用的详细内容,更多请关注龙方网络其它相关文章!

郑重声明:本文版权包含图片归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们(delete@yzlfxy.com)修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
   
验证码: