资讯专栏INFORMATION COLUMN

利用反射及循环构造Bean的一次实践(仿springMVC数据绑定)

CatalpaFlat / 874人阅读

摘要:代码展示出于演示我只构造了只有个的,不过重点不在数量。以及在中最重点的用反射操作一些总结方法在对操作的时候应该用利用的方法获取到的是所以还要遍历一次构造一个类的动态加载生成的确强大,以后会注意发掘更多的用途

为什么想这么做?

​ 在用传统Servlet做WEB项目的时候,涉及到构造一个field极多的Bean的业务,并且各个field类型不同,尽管在SpringMVC拥有属性绑定的特性,可如果不使用框架,该如何简化这个操作呢?

怎么做?

​ 首先想到的是用一个Map将各个属性put进去,然后遍历这个Map利用反射构造属性。

代码展示

​ 出于演示我只构造了只有3个field的Bean,不过重点不在数量。

​ Person.java

public class Person {
   private String name;
   private Integer price;
   private String love;

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name="" + name + """ +
                ", price=" + price +
                ", love="" + love + """ +
                "}";
    }

    public void setName(String name) {
        System.out.println("----------------------------");
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    public String getLove() {
        return love;
    }

    public void setLove(String love) {
        this.love = love;
    }
}

以及在Servlet中最重点的用反射操作Bean

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Bean extends HttpServlet {


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
            Map maps= req.getParameterMap();
            Map map=new HashMap();
            Iterator iterator=maps.entrySet().iterator();
            while (iterator.hasNext()){
                Map.Entry entry= (Map.Entry) iterator.next();
                String key= (String) entry.getKey();
                map.put(key,req.getParameter(key));
            }
            Person person= (Person) build(Person.class,map);
            System.out.println(person);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    public static Object build(Class clz,Map fieldMap)
            throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
        Field[] fields=clz.getDeclaredFields();
        Object obj=clz.newInstance();
        Object value=null;
        for (int i=0;i
一些总结

String.split()方法在对“ . ” 操作的时候应该用“.”

利用request的getParameterMap()方法获取到的是Map map ,所以还要遍历一次map构造一个Map map

类的动态加载生成的确强大,以后会注意发掘更多的用途

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69422.html

相关文章

  • SpringMVC学习笔记

    摘要:是目前最流行的一种互联网软件架构。协议,是一个无状态协议,即所有的状态都保存在服务器端。而这种转化是建立在表现层之上的,所以就是表现层状态转化。具体说,就是协议里面,四个表示操作方式的动词。 一、SpringMVC概述 Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一 Spring3.0之后全面超越Struts2,成为最优秀的MVC框架 S...

    roundstones 评论0 收藏0
  • Java深入-框架技巧

    摘要:从使用到原理学习线程池关于线程池的使用,及原理分析分析角度新颖面向切面编程的基本用法基于注解的实现在软件开发中,分散于应用中多出的功能被称为横切关注点如事务安全缓存等。 Java 程序媛手把手教你设计模式中的撩妹神技 -- 上篇 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样…… Java 进阶面试问题列表 -...

    chengtao1633 评论0 收藏0
  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0
  • Spring 各种注解备注

    摘要:注解,以明确指出该类是配置的信息源注解会告知扫描指定的包来初始化这能够确保我们声明的能够被发现。注解加载配置文件禁用特定的自动配置注解等价于以默认属性使用,和。使用这个注释将警告信息去掉。 @ConditionalOnBean 配置了某个特定Bean@ConditionalOnMissingBean 没有配置特定的Bean@ConditionalOnClass Classpath里有指...

    hosition 评论0 收藏0

发表评论

0条评论

CatalpaFlat

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<