From 9b4433fddf5b401edb0aace8a404ac733b122702 Mon Sep 17 00:00:00 2001
From: 田源 <tianyuan@vci-tech.com>
Date: 星期四, 03 四月 2025 14:35:02 +0800
Subject: [PATCH] 添加非密字段显示
---
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