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 1e74d37187956e4a8c99e2ef3e72417f648ef1eb..98247af81075a343475a016f068c3bc79969cf9c 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();
diff --git a/common-base2/pom.xml b/common-base2/pom.xml
index ec645a4a39fcdbae8520473b399e73b859dbbf62..ea528a9365122a7aa19335669d67f4f335c2d769 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 f797d484dc7a3fcbf775560be8b54f2b9bd48159..4581b4335383cb1348d24cff12a6fdf23663e0f7 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 4f2a1ce2e77755588bfb5a95b5399af6d0445260..7971c1c9b8650c74d4db6b5b48b4f7fb322b0496 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 c7ad4da4773c620e49c80906ad147ea9aa58d796..c5f949822364a912be2492bb14cc48f261b5bfcd 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 70665f5107c0548a1df119f113d79c40adb36d9d..955b0c53ec3adcace081b51521aabe4daa9bfcf1 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 03d82e0b8a4aad7b5e56a0ff4951d0db547e59eb..c53fcbd83c7a01b1af19dbad103dc41380901d8b 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 ab4f19811914ceaf63c0d885081195c7a0ee920b..3156bd7691f6bd893a798d1da00260c727edb8ae 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 1b768a69bf835e94a4cf7f06366957f7f3b12834..55444f3ea583a0f6a4d9fb091632956a0f30b3b6 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 adc697c8f8867ea4da2a4a936c90aac81f8f6673..5aacbb607e1edb5341dbe2b04dc07073e1cf534b 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 f5352e95552952fd8787332461fc6d397738b187..9b1eacc73eff38f0880fd5ed3418067b2e75c39f 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 01b68c73ae1a2372385f9fc55e6f22265a2c555e..594bb0409e8d76cc92d631686ddec457b29d8d87 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 12425257b4c381e739d25d0396de97ecab346d15..cdc3ce86b5148263085e59bf1bc643e22ad6841c 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 772a9d97ccc474e87251dddb5b5fdf5b4b41e13f..5e73066bfd529a1875c382dae5933d489b0abf12 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 3430e23bc3fc321e1fec9379b7e053356439f5ed..80c2b88c862677871caad1b789abd2f1583c8374 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 cfcc0d107cc55049da1dc5749752a5fe847bd3a4..1470ecb1355b18858412f1a3b9f1925952a1e230 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 4c8fdf29d07a76507e4b1814dc1e820e7c62da0c..cf716e7ab75429d7cc8ac751bad37054d133bed8 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