iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用java怎么动态生成bean
  • 142
分享到

使用java怎么动态生成bean

2023-06-06 10:06:20 142人浏览 泡泡鱼
摘要

今天就跟大家聊聊有关使用java怎么动态生成bean,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java动态的生成javabean,只能生成属性和对应的set/get方法,不能生成

今天就跟大家聊聊有关使用java怎么动态生成bean,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

java动态的生成javabean,只能生成属性和对应的set/get方法,不能生成其他的方法。

import org.assertj.core.internal.cglib.beans.BeanGenerator;import org.assertj.core.internal.cglib.beans.BeanMap;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class BeanCeater { public static void main(String[] args) throws ClassNotFoundException {  System.out.println("Generate JavaBean");  Map properties = new HashMap();  properties.put("id", Class.forName("java.lang.Integer"));  properties.put("name", Class.forName("java.lang.String"));  properties.put("address", Class.forName("java.lang.String"));  Object stu = generateObject(properties);  System.out.println("Set values");  setValue(stu, "id", 123);  setValue(stu, "name", "454");  setValue(stu, "address", "789");  System.out.println("Get values");  System.out.println(">> " + getValue(stu, "id"));  System.out.println(">> " + getValue(stu, "name"));  System.out.println(">> " + getValue(stu, "address"));  System.out.println("Show all methods");  Method[] methods = stu.getClass().getDeclaredMethods();  for(Method method : methods) {   System.out.println(">> " + method.getName());  }  System.out.println("Show all properties");  Field[] fields = stu.getClass().getDeclaredFields();  for(Field field : fields) {   System.out.println(">> " + field.getName());  } } private static Object generateObject(Map properties) {  BeanGenerator generator = new BeanGenerator();  Set keySet = properties.keySet();  for(Iterator i = keySet.iterator(); i.hasNext();) {   String key = (String)i.next();   generator.addProperty(key, (Class)properties.get(key));  }  return generator.create(); } private static Object getValue(Object obj, String property) {  BeanMap beanMap = BeanMap.create(obj);  return beanMap.get(property); } private static void setValue(Object obj, String property, Object value) {  BeanMap beanMap = BeanMap.create(obj);  beanMap.put(property, value); }}

代码不难懂,有需要的自己复制。

补充:spring 工具类 ReflectionUtils 获取bean所有字段

以前遇到要获取当前类以及所有父类的的field的时候,都是递归一直往上找,一直到Object ,个人觉得这种方法是不是太low了,有没有更好的办法?或者jdk其实是有这种方法的,只是我不知道,今天看了下spring中的实现,也是一样的,真没有更好的办法?

public static void doWithFields(Class<?> clazz, ReflectionUtils.FieldCallback fc, @Nullable ReflectionUtils.FieldFilter ff) {    Class targetClass = clazz;     do {      Field[] fields = getDeclaredFields(targetClass);      Field[] var5 = fields;      int var6 = fields.length;       for(int var7 = 0; var7 < var6; ++var7) {        Field field = var5[var7];        if (ff == null || ff.matches(field)) {          try {            fc.doWith(field);          } catch (IllegalAccessException var10) {            throw new IllegalStateException("Not allowed to access field '" + field.getName() + "': " + var10);          }        }      }       targetClass = targetClass.getSuperclass();    } while(targetClass != null && targetClass != Object.class);   }   private static Field[] getDeclaredFields(Class<?> clazz) {    Assert.notNull(clazz, "Class must not be null");    Field[] result = (Field[])declaredFieldsCache.get(clazz);    if (result == null) {      try {        result = clazz.getDeclaredFields();        declaredFieldsCache.put(clazz, result.length == 0 ? NO_FIELDS : result);      } catch (Throwable var3) {        throw new IllegalStateException("Failed to introspect Class [" + clazz.getName() + "] from ClassLoader [" + clazz.getClassLoader() + "]", var3);      }    }     return result;  }

看完上述内容,你们对使用java怎么动态生成bean有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 使用java怎么动态生成bean

本文链接: https://www.lsjlt.com/news/246354.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c#程序自启动怎么设置
    c# 程序的自启动方法有三种:注册表:在指定注册表项下创建新值,并将其设置为程序可执行文件路径。任务计划程序:创建一个新任务,并在触发器和动作部分分别指定登录时或特定时间触发,以及启动程...
    99+
    2024-05-14
    c#
  • c#怎么调用dll文件
    可在 c# 中轻松调用 dll 文件:引用 dll(使用 dllimport 特性)定义与 dll 函数签名匹配的函数原型调用 dll 函数(如同 c# 函数)附加技巧:使用 chars...
    99+
    2024-05-14
    c#
  • 如何构建 Golang RESTful API,并实现 CRUD 操作?
    通过创建 golang 项目并安装必要的包,我们可以构建一个功能齐全的 restful api。它使用 mysql 数据库进行 crud 操作:1. 创建和连接数据库;2. 定义数据结构...
    99+
    2024-05-14
    go crud mysql git golang
  • c#怎么添加类文件
    在c#中添加类文件的步骤:1. 创建新项目,2. 添加新类,3. 为类添加代码,4. 在另一个类中引用新类。using语句引用类文件所在的命名空间;new运算符创建类的新实例;点运算符访...
    99+
    2024-05-14
    c#
  • 使用 C++ 构建高性能服务器架构的最佳实践
    遵循 c++++ 中构建高性能服务器架构的最佳实践可以创建可扩展、可靠且可维护的系统:使用线程池以重用线程,提高性能。利用协程减少上下文切换和内存开销,提升性能。通过智能指针和引用计数优...
    99+
    2024-05-14
    c++ 高性能服务器架构 数据访问
  • c#怎么添加字段
    在 c# 中添加字段包括以下步骤:声明字段:在类或结构中使用 字段类型 字段名; 语法声明字段。访问修饰符:用于限制对字段的访问,如 private、public、protected 和...
    99+
    2024-05-14
    c#
  • c#中怎么添加引用
    c# 中添加引用的方法有四种:使用 nuget 包管理器添加软件包。添加项目引用以包含其他项目。手动编辑项目文件 (.csproj) 以添加引用。从编译器命令行使用 /reference...
    99+
    2024-05-14
    c#
  • c#怎么创建文本文件
    在 c# 中创建文本文件的方法包括:创建 filestream 对象以打开或创建文件。使用 streamwriter 写入文本至文件。关闭 streamwriter 对象释放资源。关闭 ...
    99+
    2024-05-14
    c#
  • c#怎么定义属性
    如何在 c# 中定义属性 属性是一种编程构造,它包含一个 get 访问器和一个 set 访问器,允许以一种类属性的方式访问字段。它们提供了一种安全且封装的方式来访问和修改类的内部数据。 ...
    99+
    2024-05-14
    c#
  • 基于 C++ 的服务器架构的安全性考虑因素
    在设计基于 c++++ 的服务器架构时,安全考虑至关重要:使用 std::string 或 std::vector 避免缓冲区溢出。使用正则表达式或库函数验证用户输入。采用输出转义防止跨...
    99+
    2024-05-14
    安全性 关键词: c++ 服务器架构 c++ lsp
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作