From 53b2ffcc4daa41e9c1300bb83ceb6856142cb74d Mon Sep 17 00:00:00 2001
From: guyadong <10km0811@sohu.com>
Date: Wed, 26 Mar 2025 18:56:36 +0800
Subject: [PATCH 1/2] =?UTF-8?q?perf(common-base2):=20=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=E7=BC=93=E5=AD=98=E7=AD=96=E7=95=A5=E5=B9=B6=E6=8F=90=E5=8D=87?=
=?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=80=A7=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 调整 AoWeakCacheable 注解参数,优化缓存效果
- 移除 FieldDescriptorFactory 中的复杂缓存逻辑
- 更新 NameResolver 中的缓存策略
- 调整 BeanPropertySupportImpl 中的缓存设置
- 优化 MappedPropertyDescriptor 中的方法缓存
- 更新 FieldPropertyDescriptor 中的缓存策略
- 调整 BaseTypeTransformer 中的缓存设置
- 添加 PerformanceProfiler 相关测试代码
---
common-base2/pom.xml | 4 +++
.../l0km/com4j/basex/BaseTypeTransformer.java | 3 +-
.../basex/bean/BaseBeanPropertySupport.java | 7 +++++
.../com4j/basex/bean/MultiCaseMatcher.java | 1 -
.../l0km/com4j/basex/bean/NameResolver.java | 8 +++++
.../bean/jdk/BeanPropertySupportImpl.java | 17 +++++-----
.../descriptor/FieldPropertyDescriptor.java | 3 +-
.../descriptor/MappedPropertyDescriptor.java | 3 ++
.../jdk/factory/FieldDescriptorFactory.java | 31 +------------------
.../openbeans/BeanPropertySupportImpl.java | 17 +++++-----
.../descriptor/FieldPropertyDescriptor.java | 3 +-
.../descriptor/MappedPropertyDescriptor.java | 3 ++
.../factory/FieldDescriptorFactory.java | 31 +------------------
.../com4j/basex/BaseTypeTransformerTest.java | 11 ++++++-
.../basex/bean/BeanPropertySupportTest.java | 6 ++++
pom.xml | 2 +-
16 files changed, 68 insertions(+), 82 deletions(-)
diff --git a/common-base2/pom.xml b/common-base2/pom.xml
index ec645a4a..ea528a93 100644
--- a/common-base2/pom.xml
+++ b/common-base2/pom.xml
@@ -128,6 +128,10 @@
1.7
true
true
+
ignore
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/BaseTypeTransformer.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/BaseTypeTransformer.java
index f797d484..4581b433 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/BaseTypeTransformer.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/BaseTypeTransformer.java
@@ -41,6 +41,7 @@ import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.UUID;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
@@ -769,7 +770,7 @@ public class BaseTypeTransformer{
* @since 4.4.0
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
- @AoWeakCacheable
+ @AoWeakCacheable(expireAfterAccess = 16, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
protected Function, ?> getTransformer(final TypeToken> left, final TypeToken> right) {
checkArgument(null != left && null != right, "left, right must not be null");
Function result = getTransformer0(left, right, true);
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/BaseBeanPropertySupport.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/BaseBeanPropertySupport.java
index 4f2a1ce2..7971c1c9 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/BaseBeanPropertySupport.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/BaseBeanPropertySupport.java
@@ -92,10 +92,12 @@ public abstract class BaseBeanPropertySupport {
* 获取beanClass中所有具有指定读写类型(rw)的属性名集合
* @param beanClass
* @param rw 属性类型标记
+ *
* - 0 所有属性
* - 1 读属性
* - 2 写属性
* - 3 读写属性
+ *
* @param lenient 是否为宽容模式---允许返回类型不为void的setter方法
* @return 属性名与PropertyDescriptor映射的Map对象
* @since 2.8.0
@@ -950,6 +952,11 @@ public abstract class BaseBeanPropertySupport {
private void supplementNullPropertiesFrom(Object dest, Object orig, BaseTypeTransformer typeTransformer,
ContextProvider... features) {
if (null != dest && null != orig && features.length != 0) {
+ /**
+ * 遍历目标对象所有可写入字段,
+ * 当目标字段为 null,且源对象不存在该属性的读取方法,
+ * 对 null 执行转换,如果转换结果不为 null,则设置到属性中
+ */
for (String name : getPropertyNames(dest, 2, true)) {
Object value = getProperty(dest, name);
if (value == null && !isReadable(orig, name)) {
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/MultiCaseMatcher.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/MultiCaseMatcher.java
index c7ad4da4..c5f94982 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/MultiCaseMatcher.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/MultiCaseMatcher.java
@@ -167,7 +167,6 @@ public class MultiCaseMatcher {
* @param collection
* @param name
*/
- @AoWeakCacheable(expireAfterAccess = 2, expireAfterAccessTimeUnit = TimeUnit.MINUTES)
public static String matchedNameOf(Collection> collection, String name) {
return COLLECTION_MATCHER.matchedNameOf(collection, name);
}
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/NameResolver.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/NameResolver.java
index 70665f51..955b0c53 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/NameResolver.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/NameResolver.java
@@ -1,8 +1,11 @@
package com.gitee.l0km.com4j.basex.bean;
+import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import com.gitee.l0km.aocache.annotations.AoWeakCacheable;
+
/**
* base on org.apache.commons.beanutils.expression.DefaultResolver
* Default Property Name Expression {@code Resolver} Implementation.
@@ -186,6 +189,7 @@ public class NameResolver {
* @param expression The property expression
* @return The property name
*/
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 8, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
public String getProperty(String expression) {
if (expression == null || expression.length() == 0) {
return expression;
@@ -226,6 +230,7 @@ public class NameResolver {
* @return true
if the expresion is indexed,
* otherwise false
*/
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 8, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
public boolean isIndexed(String expression) {
if (expression == null || expression.length() == 0) {
return false;
@@ -239,6 +244,7 @@ public class NameResolver {
* @return true
if the expresion is indexed,
* otherwise false
*/
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 8, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
public boolean isSearched(String expression) {
if (expression == null || expression.length() == 0) {
return false;
@@ -253,6 +259,7 @@ public class NameResolver {
* @return true
if the expresion is mapped,
* otherwise false
*/
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 8, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
public boolean isMapped(String expression) {
if (expression == null || expression.length() == 0) {
return false;
@@ -356,6 +363,7 @@ public class NameResolver {
* @return The new expression value, with first property
* expression removed - null if there are no more expressions
*/
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 8, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
public String remove(String expression) {
if (expression == null || expression.length() == 0) {
return null;
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/BeanPropertySupportImpl.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/BeanPropertySupportImpl.java
index 03d82e0b..c53fcbd8 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/BeanPropertySupportImpl.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/BeanPropertySupportImpl.java
@@ -16,7 +16,6 @@ import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
@@ -72,7 +71,8 @@ public class BeanPropertySupportImpl extends BaseBeanPropertySupport {
protected BeanPropertySupportImpl(BaseTypeTransformer typeTransformer, ContextProvider[] transformerFeatures) {
super(typeTransformer, transformerFeatures);
}
- @AoWeakCacheable
+
+ @Override
public BaseBeanPropertySupport withTransformer(BaseTypeTransformer typeTransformer,
ContextProvider... transformerFeatures) {
if( null == typeTransformer){
@@ -88,7 +88,7 @@ public class BeanPropertySupportImpl extends BaseBeanPropertySupport {
return new BeanPropertySupportImpl(typeTransformer, transformerFeatures);
}
- @AoWeakCacheable(maximumSize = 1000, expireAfterAccess = 2, expireAfterAccessTimeUnit = TimeUnit.MINUTES)
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 60, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
private static BeanIntrospectionData getIntrospectionData0(Class> beanClass) throws IntrospectionException {
BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
@@ -146,15 +146,17 @@ public class BeanPropertySupportImpl extends BaseBeanPropertySupport {
* 获取beanClass中所有具有指定读写类型(rw)的属性
* @param beanClass
* @param rw 属性类型标记
+ *
* - 0 所有属性
* - 1 读属性
* - 2 写属性
* - 3 读写属性
+ *
* @param lenient 是否为宽容模式---允许返回类型不为void的setter方法
- * @return 属性名与PropertyDescriptor映射的Map对象
+ * @return 属性名与PropertyDescriptor映射的LinkedHashMap对象(不可修改)
*/
- @AoWeakCacheable
- public HashMap getProperties(Class> beanClass, int rw, boolean lenient) {
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 8, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
+ public Map getProperties(Class> beanClass, int rw, boolean lenient) {
LinkedHashMap properties = new LinkedHashMap();
if (beanClass != null) {
PropertyDescriptor[] origDescriptors = getPropertyDescriptors(beanClass);
@@ -181,7 +183,7 @@ public class BeanPropertySupportImpl extends BaseBeanPropertySupport {
}
}
}
- return properties;
+ return Collections.unmodifiableMap(properties);
}
/**
* 获取beanClass中所有具有指定读写类型(rw)的属性
@@ -833,7 +835,6 @@ public class BeanPropertySupportImpl extends BaseBeanPropertySupport {
* @param descriptor
* @since 4.4.0
*/
- @AoWeakCacheable(maximumSize = 1000, expireAfterAccess = 2, expireAfterAccessTimeUnit = TimeUnit.MINUTES)
private static Type propertyGenericTypeForWriteOf(PropertyDescriptor descriptor) {
if(descriptor instanceof NoStandardPropertyDescriptor){
return ((NoStandardPropertyDescriptor)descriptor).getPropertyGenericType();
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/descriptor/FieldPropertyDescriptor.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/descriptor/FieldPropertyDescriptor.java
index ab4f1981..3156bd76 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/descriptor/FieldPropertyDescriptor.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/descriptor/FieldPropertyDescriptor.java
@@ -101,6 +101,7 @@ public class FieldPropertyDescriptor extends BaseNoStandardPropertyDescriptor{
public Field getField() {
return field;
}
+ @AoWeakCacheable(maximumSize = 100, expireAfterAccess = 60, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
public static FieldPropertyDescriptor create(Class> beanClass,String name){
if(null != beanClass && null != name){
Field field = MultiCaseMatcher.matchedFieldOf(beanClass, name);
@@ -154,7 +155,7 @@ public class FieldPropertyDescriptor extends BaseNoStandardPropertyDescriptor{
* @return 返回不可变的字段名称集合,如果类为空则返回空集合
*
*/
- @AoWeakCacheable(maximumSize = 100, expireAfterAccess = 2, expireAfterAccessTimeUnit = TimeUnit.MINUTES)
+ @AoWeakCacheable(maximumSize = 100, expireAfterAccess = 60, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
private static ImmutableSet> allFieldNamesOf(Class> clazz, boolean withFinal) {
if (null != clazz) {
ImmutableSet.Builder builder = ImmutableSet.builder();
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/descriptor/MappedPropertyDescriptor.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/descriptor/MappedPropertyDescriptor.java
index 1b768a69..55444f3e 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/descriptor/MappedPropertyDescriptor.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/descriptor/MappedPropertyDescriptor.java
@@ -7,7 +7,9 @@ import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.concurrent.TimeUnit;
+import com.gitee.l0km.aocache.annotations.AoWeakCacheable;
import com.gitee.l0km.com4j.basex.reflection.MethodUtils;
@@ -362,6 +364,7 @@ public class MappedPropertyDescriptor extends PropertyDescriptor {
/**
* Find a method on a class with a specified number of parameters.
*/
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 8, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
private static Method getMethod(Class> clazz, String methodName, int parameterCount)
throws IntrospectionException {
if (methodName == null) {
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/factory/FieldDescriptorFactory.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/factory/FieldDescriptorFactory.java
index adc697c8..5aacbb60 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/factory/FieldDescriptorFactory.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/jdk/factory/FieldDescriptorFactory.java
@@ -2,45 +2,16 @@ package com.gitee.l0km.com4j.basex.bean.jdk.factory;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
-import java.util.Arrays;
-import java.util.List;
-
-import com.gitee.l0km.com4j.basex.bean.exception.BeanPropertyRuntimeException;
import com.gitee.l0km.com4j.basex.bean.jdk.descriptor.FieldPropertyDescriptor;
-import com.gitee.l0km.com4j.basex.cache.FunctionCached;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
/**
* @author guyadong
* @since 2.7.0
*/
public class FieldDescriptorFactory implements PropertyDescriptorFactory {
- private static final FunctionCached, Optional> descriptorCached = FunctionCached.of(new Function,Optional>(){
-
- @Override
- public Optional apply(List> input) {
- if(input.get(0) instanceof Class && input.get(1) instanceof String){
- PropertyDescriptor descriptor = FieldPropertyDescriptor.create(((Class>)input.get(0)), (String)input.get(1));
- if(null!= descriptor) {
- return Optional.of(descriptor);
- }
- }
- return Optional.absent();
- }});
@Override
public PropertyDescriptor descriptorOf(Object bean, String name) throws IntrospectionException {
- try {
- if(bean != null ){
- return descriptorCached.get(Arrays.asList(bean.getClass(),name)).orNull();
- }
- return null;
- } catch (BeanPropertyRuntimeException e) {
- if(e.getCause() instanceof IntrospectionException) {
- throw (IntrospectionException)e.getCause();
- }
- throw e;
- }
+ return FieldPropertyDescriptor.create(bean, name);
}
}
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/BeanPropertySupportImpl.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/BeanPropertySupportImpl.java
index f5352e95..9b1eacc7 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/BeanPropertySupportImpl.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/BeanPropertySupportImpl.java
@@ -16,7 +16,6 @@ import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
@@ -72,7 +71,8 @@ public class BeanPropertySupportImpl extends BaseBeanPropertySupport {
protected BeanPropertySupportImpl(BaseTypeTransformer typeTransformer, ContextProvider[] transformerFeatures) {
super(typeTransformer, transformerFeatures);
}
- @AoWeakCacheable
+
+ @Override
public BaseBeanPropertySupport withTransformer(BaseTypeTransformer typeTransformer,
ContextProvider... transformerFeatures) {
if( null == typeTransformer){
@@ -88,7 +88,7 @@ public class BeanPropertySupportImpl extends BaseBeanPropertySupport {
return new BeanPropertySupportImpl(typeTransformer, transformerFeatures);
}
- @AoWeakCacheable(maximumSize = 1000, expireAfterAccess = 2, expireAfterAccessTimeUnit = TimeUnit.MINUTES)
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 60, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
private static BeanIntrospectionData getIntrospectionData0(Class> beanClass) throws IntrospectionException {
BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
@@ -146,15 +146,17 @@ public class BeanPropertySupportImpl extends BaseBeanPropertySupport {
* 获取beanClass中所有具有指定读写类型(rw)的属性
* @param beanClass
* @param rw 属性类型标记
+ *
* - 0 所有属性
* - 1 读属性
* - 2 写属性
* - 3 读写属性
+ *
* @param lenient 是否为宽容模式---允许返回类型不为void的setter方法
- * @return 属性名与PropertyDescriptor映射的Map对象
+ * @return 属性名与PropertyDescriptor映射的LinkedHashMap对象(不可修改)
*/
- @AoWeakCacheable
- public HashMap getProperties(Class> beanClass, int rw, boolean lenient) {
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 8, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
+ public Map getProperties(Class> beanClass, int rw, boolean lenient) {
LinkedHashMap properties = new LinkedHashMap();
if (beanClass != null) {
PropertyDescriptor[] origDescriptors = getPropertyDescriptors(beanClass);
@@ -181,7 +183,7 @@ public class BeanPropertySupportImpl extends BaseBeanPropertySupport {
}
}
}
- return properties;
+ return Collections.unmodifiableMap(properties);
}
/**
* 获取beanClass中所有具有指定读写类型(rw)的属性
@@ -833,7 +835,6 @@ public class BeanPropertySupportImpl extends BaseBeanPropertySupport {
* @param descriptor
* @since 4.4.0
*/
- @AoWeakCacheable(maximumSize = 1000, expireAfterAccess = 2, expireAfterAccessTimeUnit = TimeUnit.MINUTES)
private static Type propertyGenericTypeForWriteOf(PropertyDescriptor descriptor) {
if(descriptor instanceof NoStandardPropertyDescriptor){
return ((NoStandardPropertyDescriptor)descriptor).getPropertyGenericType();
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/descriptor/FieldPropertyDescriptor.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/descriptor/FieldPropertyDescriptor.java
index 01b68c73..594bb040 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/descriptor/FieldPropertyDescriptor.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/descriptor/FieldPropertyDescriptor.java
@@ -101,6 +101,7 @@ public class FieldPropertyDescriptor extends BaseNoStandardPropertyDescriptor{
public Field getField() {
return field;
}
+ @AoWeakCacheable(maximumSize = 100, expireAfterAccess = 60, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
public static FieldPropertyDescriptor create(Class> beanClass,String name){
if(null != beanClass && null != name){
Field field = MultiCaseMatcher.matchedFieldOf(beanClass, name);
@@ -154,7 +155,7 @@ public class FieldPropertyDescriptor extends BaseNoStandardPropertyDescriptor{
* @return 返回不可变的字段名称集合,如果类为空则返回空集合
*
*/
- @AoWeakCacheable(maximumSize = 100, expireAfterAccess = 2, expireAfterAccessTimeUnit = TimeUnit.MINUTES)
+ @AoWeakCacheable(maximumSize = 100, expireAfterAccess = 60, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
private static ImmutableSet> allFieldNamesOf(Class> clazz, boolean withFinal) {
if (null != clazz) {
ImmutableSet.Builder builder = ImmutableSet.builder();
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/descriptor/MappedPropertyDescriptor.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/descriptor/MappedPropertyDescriptor.java
index 12425257..cdc3ce86 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/descriptor/MappedPropertyDescriptor.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/descriptor/MappedPropertyDescriptor.java
@@ -7,7 +7,9 @@ import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.concurrent.TimeUnit;
+import com.gitee.l0km.aocache.annotations.AoWeakCacheable;
import com.gitee.l0km.com4j.basex.reflection.MethodUtils;
@@ -362,6 +364,7 @@ public class MappedPropertyDescriptor extends PropertyDescriptor {
/**
* Find a method on a class with a specified number of parameters.
*/
+ @AoWeakCacheable(maximumSize = 200, expireAfterAccess = 8, expireAfterAccessTimeUnit = TimeUnit.SECONDS)
private static Method getMethod(Class> clazz, String methodName, int parameterCount)
throws IntrospectionException {
if (methodName == null) {
diff --git a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/factory/FieldDescriptorFactory.java b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/factory/FieldDescriptorFactory.java
index 772a9d97..5e73066b 100644
--- a/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/factory/FieldDescriptorFactory.java
+++ b/common-base2/src/main/java/com/gitee/l0km/com4j/basex/bean/openbeans/factory/FieldDescriptorFactory.java
@@ -2,45 +2,16 @@ package com.gitee.l0km.com4j.basex.bean.openbeans.factory;
import com.googlecode.openbeans.IntrospectionException;
import com.googlecode.openbeans.PropertyDescriptor;
-import java.util.Arrays;
-import java.util.List;
-
-import com.gitee.l0km.com4j.basex.bean.exception.BeanPropertyRuntimeException;
import com.gitee.l0km.com4j.basex.bean.openbeans.descriptor.FieldPropertyDescriptor;
-import com.gitee.l0km.com4j.basex.cache.FunctionCached;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
/**
* @author guyadong
* @since 2.7.0
*/
public class FieldDescriptorFactory implements PropertyDescriptorFactory {
- private static final FunctionCached, Optional> descriptorCached = FunctionCached.of(new Function,Optional>(){
-
- @Override
- public Optional apply(List> input) {
- if(input.get(0) instanceof Class && input.get(1) instanceof String){
- PropertyDescriptor descriptor = FieldPropertyDescriptor.create(((Class>)input.get(0)), (String)input.get(1));
- if(null!= descriptor) {
- return Optional.of(descriptor);
- }
- }
- return Optional.absent();
- }});
@Override
public PropertyDescriptor descriptorOf(Object bean, String name) throws IntrospectionException {
- try {
- if(bean != null ){
- return descriptorCached.get(Arrays.asList(bean.getClass(),name)).orNull();
- }
- return null;
- } catch (BeanPropertyRuntimeException e) {
- if(e.getCause() instanceof IntrospectionException) {
- throw (IntrospectionException)e.getCause();
- }
- throw e;
- }
+ return FieldPropertyDescriptor.create(bean, name);
}
}
diff --git a/common-base2/src/test/java/com/gitee/l0km/com4j/basex/BaseTypeTransformerTest.java b/common-base2/src/test/java/com/gitee/l0km/com4j/basex/BaseTypeTransformerTest.java
index 3430e23b..80c2b88c 100644
--- a/common-base2/src/test/java/com/gitee/l0km/com4j/basex/BaseTypeTransformerTest.java
+++ b/common-base2/src/test/java/com/gitee/l0km/com4j/basex/BaseTypeTransformerTest.java
@@ -47,10 +47,14 @@ import static com.gitee.l0km.com4j.basex.BaseTypeTransformer.isContainerType;
import static com.gitee.l0km.com4j.basex.BaseTypeTransformer.elementTypeOf;
import static com.gitee.l0km.com4j.basex.BaseTypeTransformer.isEmpty;
+import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
+import com.gitee.l0km.aocache.AocacheLogger;
+import com.gitee.l0km.aocache.MemberCache;
+import com.gitee.l0km.aocache.PerformanceProfiler;
import com.gitee.l0km.com4j.basex.transformer.Feature;
import com.google.common.base.Function;
import com.google.common.collect.BiMap;
@@ -71,7 +75,12 @@ import com.google.common.util.concurrent.AtomicDouble;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class BaseTypeTransformerTest {
-
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ MemberCache.INSTANCE.setLogger(AocacheLogger.DEFAULT, false, true, true);
+ /** PerformanceProfiler 测试 */
+// PerformanceProfiler.setEnableLog(true);
+ }
@Test
public void test01ToArray() {
BaseTypeTransformer transformer = new BaseTypeTransformer();
diff --git a/common-base2/src/test/java/com/gitee/l0km/com4j/basex/bean/BeanPropertySupportTest.java b/common-base2/src/test/java/com/gitee/l0km/com4j/basex/bean/BeanPropertySupportTest.java
index cfcc0d10..1470ecb1 100644
--- a/common-base2/src/test/java/com/gitee/l0km/com4j/basex/bean/BeanPropertySupportTest.java
+++ b/common-base2/src/test/java/com/gitee/l0km/com4j/basex/bean/BeanPropertySupportTest.java
@@ -15,6 +15,9 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.gitee.l0km.aocache.AocacheLogger;
+import com.gitee.l0km.aocache.MemberCache;
+import com.gitee.l0km.aocache.PerformanceProfiler;
import com.gitee.l0km.com4j.basex.DateSupport;
import com.gitee.l0km.com4j.basex.bean.BaseBeanPropertySupport.DiffNode;
import com.gitee.l0km.com4j.basex.bean.exception.CycleReferenceException;
@@ -33,6 +36,9 @@ public class BeanPropertySupportTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
BeanPropertySupport.setTraceEnabled(true);
+ MemberCache.INSTANCE.setLogger(AocacheLogger.DEFAULT, false, true, true);
+ /** PerformanceProfiler 测试 */
+// PerformanceProfiler.setEnableLog(true);
}
@Test
public void test02PublicFieldBean() {
diff --git a/pom.xml b/pom.xml
index 4c8fdf29..cf716e7a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
common java library
UTF-8
- 0.5.0
+ 0.5.1-SNAPSHOT
1.9.7
true
--
Gitee
From 4090dc20236371c77415fb917161a9ad8c070927 Mon Sep 17 00:00:00 2001
From: cylzhh
Date: Wed, 26 Mar 2025 15:40:53 +0000
Subject: [PATCH 2/2] =?UTF-8?q?update=20common-base/src/main/java/com/gite?=
=?UTF-8?q?e/l0km/com4j/base/MiscellaneousUtils.java.=20storeSortedMap?=
=?UTF-8?q?=E6=96=B9=E6=B3=95=E7=9A=84lineSeparator=E5=8F=82=E6=95=B0?=
=?UTF-8?q?=E6=B2=A1=E7=94=A8=E4=B8=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: cylzhh
---
.../main/java/com/gitee/l0km/com4j/base/MiscellaneousUtils.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common-base/src/main/java/com/gitee/l0km/com4j/base/MiscellaneousUtils.java b/common-base/src/main/java/com/gitee/l0km/com4j/base/MiscellaneousUtils.java
index 1e74d371..98247af8 100644
--- a/common-base/src/main/java/com/gitee/l0km/com4j/base/MiscellaneousUtils.java
+++ b/common-base/src/main/java/com/gitee/l0km/com4j/base/MiscellaneousUtils.java
@@ -66,7 +66,7 @@ public class MiscellaneousUtils {
if(null==lineSeparator){
bw.newLine();
}else{
- bw.write("\n");
+ bw.write(lineSeparator);
}
}
bw.flush();
--
Gitee