From 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a Mon Sep 17 00:00:00 2001 From: xiejun <xiejun@vci-tech.com> Date: 星期五, 01 十一月 2024 15:11:19 +0800 Subject: [PATCH] Revert "集成获取mdm分发通用数据格式接口集成" --- Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/beans/BladeBeanMap.java | 125 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 125 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/beans/BladeBeanMap.java b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/beans/BladeBeanMap.java new file mode 100644 index 0000000..f2823fb --- /dev/null +++ b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/beans/BladeBeanMap.java @@ -0,0 +1,125 @@ +package org.springblade.core.tool.beans; + +import org.springframework.asm.ClassVisitor; +import org.springframework.cglib.beans.BeanMap; +import org.springframework.cglib.core.AbstractClassGenerator; +import org.springframework.cglib.core.ReflectUtils; + +import java.security.ProtectionDomain; + +/** + * 閲嶅啓 cglib BeanMap锛屾敮鎸侀摼寮廱ean + * + * @author L.cm + */ +public abstract class BladeBeanMap extends BeanMap { + protected BladeBeanMap() { + } + + protected BladeBeanMap(Object bean) { + super(bean); + } + + public static BladeBeanMap create(Object bean) { + BladeGenerator gen = new BladeGenerator(); + gen.setBean(bean); + return gen.create(); + } + + /** + * newInstance + * + * @param o Object + * @return BladeBeanMap + */ + @Override + public abstract BladeBeanMap newInstance(Object o); + + public static class BladeGenerator extends AbstractClassGenerator { + private static final Source SOURCE = new Source(BladeBeanMap.class.getName()); + + private Object bean; + private Class beanClass; + private int require; + + public BladeGenerator() { + super(SOURCE); + } + + /** + * Set the bean that the generated map should reflect. The bean may be swapped + * out for another bean of the same type using {@link #setBean}. + * Calling this method overrides any value previously set using {@link #setBeanClass}. + * You must call either this method or {@link #setBeanClass} before {@link #create}. + * + * @param bean the initial bean + */ + public void setBean(Object bean) { + this.bean = bean; + if (bean != null) { + beanClass = bean.getClass(); + } + } + + /** + * Set the class of the bean that the generated map should support. + * You must call either this method or {@link #setBeanClass} before {@link #create}. + * + * @param beanClass the class of the bean + */ + public void setBeanClass(Class beanClass) { + this.beanClass = beanClass; + } + + /** + * Limit the properties reflected by the generated map. + * + * @param require any combination of {@link #REQUIRE_GETTER} and + * {@link #REQUIRE_SETTER}; default is zero (any property allowed) + */ + public void setRequire(int require) { + this.require = require; + } + + @Override + protected ClassLoader getDefaultClassLoader() { + return beanClass.getClassLoader(); + } + + @Override + protected ProtectionDomain getProtectionDomain() { + return ReflectUtils.getProtectionDomain(beanClass); + } + + /** + * Create a new instance of the <code>BeanMap</code>. An existing + * generated class will be reused if possible. + * + * @return {BladeBeanMap} + */ + public BladeBeanMap create() { + if (beanClass == null) { + throw new IllegalArgumentException("Class of bean unknown"); + } + setNamePrefix(beanClass.getName()); + BladeBeanMapKey key = new BladeBeanMapKey(beanClass, require); + return (BladeBeanMap) super.create(key); + } + + @Override + public void generateClass(ClassVisitor v) throws Exception { + new BladeBeanMapEmitter(v, getClassName(), beanClass, require); + } + + @Override + protected Object firstInstance(Class type) { + return ((BeanMap) ReflectUtils.newInstance(type)).newInstance(bean); + } + + @Override + protected Object nextInstance(Object instance) { + return ((BeanMap) instance).newInstance(bean); + } + } + +} -- Gitblit v1.9.3