电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java 動(dòng)態(tài)生成bean的案例

瀏覽:11日期:2022-08-16 17:18:44

最近做一個(gè)需求,需求中的bean只用于生成一次json使用,所以想通過(guò)配置來(lái)動(dòng)態(tài)的生成,查了一下,java還真有這個(gè)實(shí)現(xiàn)。

java動(dòng)態(tài)的生成javabean,只能生成屬性和對(duì)應(yīng)的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;/** * Created by wangpengzhi1 on 2018/1/2. */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); }}

代碼不難懂,有需要的自己復(fù)制。

補(bǔ)充:spring 工具類 ReflectionUtils 獲取bean所有字段

以前遇到要獲取當(dāng)前類以及所有父類的的field的時(shí)候,都是遞歸一直往上找,一直到Object ,個(gè)人覺(jué)得這種方法是不是太low了,有沒(méi)有更好的辦法?或者jdk其實(shí)是有這種方法的,只是我不知道,今天看了下spring中的實(shí)現(xiàn),也是一樣的,真沒(méi)有更好的辦法?

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; }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 北京乾茂兴业科技发展有限公司 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | 广州/东莞小字符喷码机-热转印打码机-喷码机厂家-广州瑞润科技 | 英语词典_成语词典_日语词典_法语词典_在线词典网 | 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 明渠式紫外线杀菌器-紫外线消毒器厂家-定州市优威环保 | 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | 船老大板材_浙江船老大全屋定制_船老大官网| 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 户外-组合-幼儿园-不锈钢-儿童-滑滑梯-床-玩具-淘气堡-厂家-价格 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 压砖机、液压制砖机、静压砖机、环保砖机生产厂家—杜甫机械 | 氢氧化钙设备_厂家-淄博工贸有限公司 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 微动开关厂家-东莞市德沃电子科技有限公司| 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 柔性测斜仪_滑动测斜仪-广州杰芯科技有限公司 | 微学堂-电动能源汽车评测_电动车性能分享网 | 上海logo设计 | Jaeaiot捷易科技-英伟达AI显卡模组/GPU整机服务器供应商 | 东莞办公家具厂家直销-美鑫【免费3D效果图】全国办公桌/会议桌定制 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 超声波乳化机-超声波分散机|仪-超声波萃取仪-超声波均质机-精浩机械|首页 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 冷水机-冰水机-冷冻机-冷风机-本森智能装备(深圳)有限公司 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 |