Java动态Bean
Posted 追忆潸然
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java动态Bean相关的知识,希望对你有一定的参考价值。
package com.xxx.bean.entity; import com.xxx.base.common.exception.BaseException; import org.springframework.cglib.beans.BeanGenerator; import org.springframework.cglib.beans.BeanMap; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; /** * Created by xxxtech on 2020/4/23. */ public class DynamicBean { /** * 目标对象 */ private Object target; /** * 属性集合 */ private BeanMap beanMap; /** * propertyMap: 属性名称和所属类型map */ private Map<String, Class> propertyMap; public DynamicBean(Class superclass, Map<String, Class> propertyMap) { this.target = generateBean(superclass, propertyMap); this.beanMap = BeanMap.create(this.target); } /** * bean 添加属性和值 * * @param property * @param value */ public void setValue(String property, Object value) { beanMap.put(property, value); } /** * 获取属性值 * * @param property * @return */ public Object getValue(String property) { return beanMap.get(property); } /** * 获取对象 * * @return */ public Object getTarget() { return this.target; } /** * 根据属性生成对象 * * @param superclass * @param propertyMap * @return */ private Object generateBean(Class superclass, Map<String, Class> propertyMap) { BeanGenerator generator = new BeanGenerator(); if (superclass != null) { generator.setSuperclass(superclass); } this.propertyMap = propertyMap; BeanGenerator.addProperties(generator, propertyMap); return generator.create(); } /** * */ public <T> DynamicBean addPropertyToDyBean(T vo) throws BaseException { try { Field[] arr = vo.getClass().getDeclaredFields(); Map<String, Class> propertyMap = new HashMap<>(); if (this.propertyMap != null && !this.propertyMap.isEmpty()) propertyMap.putAll(this.propertyMap); for (Field field : arr) propertyMap.put(field.getName(), field.getType()); DynamicBean dyBean = new DynamicBean(vo.getClass(), propertyMap); beanMap.forEach((k, v) -> { dyBean.setValue(k.toString(), v); }); for (Field field : arr) dyBean.setValue(field.getName(), com.xxx.bean.util.ReflectionUtils.invokeGetter(vo, field.getName())); return dyBean; } catch (Exception ex) { throw new BaseException(ex.getMessage(), ex); } } }
参考文章:原作者找不到了...
在原来的基础上加了addPropertyToDyBean方法,用来实现对DynamicBean对象的再次动态新增属性和属性值。
以上是关于Java动态Bean的主要内容,如果未能解决你的问题,请参考以下文章
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段
报错“Field pet in XXX.HelloController required a bean of type ‘XXX.Pet‘ that could not be found.“(代码片段