Skip to content

Commit

Permalink
v6.6.0
Browse files Browse the repository at this point in the history
v6.6.0
  • Loading branch information
839128 committed Nov 16, 2022
2 parents 5ad5db4 + 8b734b1 commit 1369ec8
Show file tree
Hide file tree
Showing 425 changed files with 11,459 additions and 9,957 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
</p>
<p align="center">
<a target="_blank" href="https://search.maven.org/search?q=org.aoju">
<img src="https://img.shields.io/badge/maven--central-v6.5.9-blue.svg?label=Maven%20Central" />
<img src="https://img.shields.io/badge/maven--central-v6.6.0-blue.svg?label=Maven%20Central" />
</a>
<a target="_blank" href="https://travis-ci.org/aoju/bus">
<img src="https://travis-ci.com/aoju/bus.svg?branch=main">
Expand Down Expand Up @@ -97,7 +97,7 @@ Bus (应用/服务总线) 是一个基础框架、服务套件,它基于Java17
<dependency>
<groupId>org.aoju</groupId>
<artifactId>bus-all</artifactId>
<version>6.5.9</version>
<version>6.6.0</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion bus-all/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>org.aoju</groupId>
<artifactId>bus-all</artifactId>
<version>6.5.9</version>
<version>6.6.0</version>
<packaging>jar</packaging>

<name>${project.artifactId}</name>
Expand Down
4 changes: 2 additions & 2 deletions bus-base/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>org.aoju</groupId>
<artifactId>bus-base</artifactId>
<version>6.5.9</version>
<version>6.6.0</version>
<packaging>jar</packaging>

<name>${project.artifactId}</name>
Expand Down Expand Up @@ -42,7 +42,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.compiler.version>17</project.compiler.version>
<spring.boot.version>2.7.3</spring.boot.version>
<spring.boot.version>2.7.5</spring.boot.version>
<lombok.version>1.18.24</lombok.version>
<persistence.version>2.2</persistence.version>
</properties>
Expand Down
2 changes: 1 addition & 1 deletion bus-bom/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>org.aoju</groupId>
<artifactId>bus-bom</artifactId>
<version>6.5.9</version>
<version>6.6.0</version>
<packaging>pom</packaging>

<name>${project.artifactId}</name>
Expand Down
4 changes: 2 additions & 2 deletions bus-cache/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>org.aoju</groupId>
<artifactId>bus-cache</artifactId>
<version>6.5.9</version>
<version>6.6.0</version>
<packaging>jar</packaging>

<name>${project.artifactId}</name>
Expand Down Expand Up @@ -42,7 +42,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.compiler.version>17</project.compiler.version>
<spring.boot.version>2.7.3</spring.boot.version>
<spring.boot.version>2.7.5</spring.boot.version>
<lombok.version>1.18.24</lombok.version>
<guice.version>5.1.0</guice.version>
<jedis.version>4.2.3</jedis.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,10 +177,10 @@ enum CacheScheduler {
private ScheduledExecutorService scheduler;

CacheScheduler() {
create();
of();
}

private void create() {
private void of() {
this.shutdown();
this.scheduler = new ScheduledThreadPoolExecutor(10, r -> new Thread(r, String.format("OAuth-Task-%s", cacheTaskNumber.getAndIncrement())));
}
Expand Down
2 changes: 1 addition & 1 deletion bus-core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<dependency>
<groupId>org.aoju</groupId>
<artifactId>bus-core</artifactId>
<version>6.5.9</version>
<version>6.6.0</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion bus-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>org.aoju</groupId>
<artifactId>bus-core</artifactId>
<version>6.5.9</version>
<version>6.6.0</version>
<packaging>jar</packaging>

<name>${project.artifactId}</name>
Expand Down
2 changes: 1 addition & 1 deletion bus-core/src/main/java/org/aoju/bus/core/Version.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public class Version {
* @return 项目的版本号
*/
public static String get() {
return "6.5.9.RELEASE";
return "6.6.0.RELEASE";
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import org.aoju.bus.core.map.WeakMap;

/**
* Bean属性缓存
* Bean缓存
* 缓存用于防止多次反射造成的性能问题
*
* @author Kimi Liu
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
* @author Kimi Liu
* @since Java 17+
*/
public class PathExpression implements Serializable {
public class BeanPath implements Serializable {

private static final long serialVersionUID = 1L;

Expand All @@ -59,7 +59,7 @@ public class PathExpression implements Serializable {
*
* @param expression 表达式
*/
public PathExpression(final String expression) {
public BeanPath(final String expression) {
init(expression);
}

Expand All @@ -83,20 +83,20 @@ public PathExpression(final String expression) {
* </pre>
*
* @param expression 表达式
* @return {@link PathExpression}
* @return {@link BeanPath}
*/
public static PathExpression create(final String expression) {
return new PathExpression(expression);
public static BeanPath of(final String expression) {
return new BeanPath(expression);
}

private static Object getFieldValue(final Object bean, final String expression) {
if (StringKit.isBlank(expression)) {
return null;
}

if (StringKit.contains(expression, Symbol.C_COLON)) {
if (StringKit.contains(expression, ':')) {
// [start:end:step] 模式
final List<String> parts = StringKit.splitTrim(expression, Symbol.C_COLON);
final List<String> parts = StringKit.splitTrim(expression, ':');
final int start = Integer.parseInt(parts.get(0));
final int end = Integer.parseInt(parts.get(1));
int step = 1;
Expand All @@ -108,23 +108,24 @@ private static Object getFieldValue(final Object bean, final String expression)
} else if (ArrayKit.isArray(bean)) {
return ArrayKit.sub(bean, start, end, step);
}
} else if (StringKit.contains(expression, Symbol.C_COMMA)) {
final List<String> keys = StringKit.splitTrim(expression, Symbol.C_COMMA);
} else if (StringKit.contains(expression, ',')) {
// [num0,num1,num2...]模式或者['key0','key1']模式
final List<String> keys = StringKit.splitTrim(expression, ',');
if (bean instanceof Collection) {
return CollKit.getAny((Collection<?>) bean, Convert.convert(int[].class, keys));
} else if (ArrayKit.isArray(bean)) {
return ArrayKit.get(bean, Convert.convert(int[].class, keys));
} else {
final String[] unWrappedKeys = new String[keys.size()];
for (int i = 0; i < unWrappedKeys.length; i++) {
unWrappedKeys[i] = StringKit.unWrap(keys.get(i), Symbol.C_SINGLE_QUOTE);
unWrappedKeys[i] = StringKit.unWrap(keys.get(i), '\'');
}
if (bean instanceof Map) {
// 只支持String为key的Map
MapKit.getAny((Map<String, ?>) bean, unWrappedKeys);
return MapKit.getAny((Map<String, ?>) bean, unWrappedKeys);
} else {
final Map<String, Object> map = BeanKit.beanToMap(bean);
MapKit.getAny(map, unWrappedKeys);
return MapKit.getAny(map, unWrappedKeys);
}
}
} else {
Expand All @@ -135,19 +136,6 @@ private static Object getFieldValue(final Object bean, final String expression)
return null;
}

/**
* 对于非表达式去除单引号
*
* @param expression 表达式
* @return 表达式
*/
private static String unWrapIfPossible(CharSequence expression) {
if (StringKit.containsAny(expression, " = ", " > ", " < ", " like ", Symbol.COMMA)) {
return expression.toString();
}
return StringKit.unWrap(expression, Symbol.C_SINGLE_QUOTE);
}

/**
* 获取表达式解析后的分段列表
*
Expand All @@ -164,55 +152,74 @@ public List<String> getPatternParts() {
* @return 值, 如果对应值不存在, 则返回null
*/
public Object get(final Object bean) {
return get(this.patternParts, bean, false);
return get(this.patternParts, bean);
}

/**
* 判断path列表中末尾的标记是否为数字
* 设置表达式指定位置(或filed对应)的值<br>
* 若表达式指向一个List则设置其坐标对应位置的值,若指向Map则put对应key的值,Bean则设置字段的值<br>
* 注意:
*
* @param patternParts path列表
* @return 是否为数字
* <pre>
* 1. 如果为List,如果下标不大于List长度,则替换原有值,否则追加值
* 2. 如果为数组,如果下标不大于数组长度,则替换原有值,否则追加值
* </pre>
*
* @param bean Bean、Map或List
* @param value 值
*/
private static boolean lastIsNumber(List<String> patternParts) {
return MathKit.isInteger(patternParts.get(patternParts.size() - 1));
public void set(final Object bean, final Object value) {
Objects.requireNonNull(bean);

Object subBean = bean, previousBean;
boolean isFirst = true;
String patternPart;
// 尝试找到倒数第二个子对象, 最终需要设置它的字段值
final int length = patternParts.size() - 1;
for (int i = 0; i < length; i++) {
patternPart = patternParts.get(i);
// 保存当前操作的bean, 以便subBean不存在时, 可以用来填充缺失的子对象
previousBean = subBean;
// 获取当前对象的子对象
subBean = getFieldValue(subBean, patternPart);
if (null == subBean) {
// 支持表达式的第一个对象为Bean本身(若用户定义表达式$开头,则不做此操作)
if (isFirst && false == this.isStartWith && BeanKit.isMatchName(bean, patternPart, true)) {
subBean = bean;
isFirst = false;
} else {
// 填充缺失的子对象, 根据下一个表达式决定填充的值, 如果是整数(下标)则使用列表, 否则当做Map对象
subBean = MathKit.isInteger(patternParts.get(i + 1)) ? new ArrayList<>() : new HashMap<>();
BeanKit.setFieldValue(previousBean, patternPart, subBean);
// 上面setFieldValue中有可能发生对象转换, 因此此处重新获取子对象
// 欲知详情请自行阅读FieldUtil.setFieldValue(Object, Field, Object)
subBean = BeanKit.getFieldValue(previousBean, patternPart);
}
}
}
// 设置最终的字段值
BeanKit.setFieldValue(subBean, patternParts.get(length), value);
}

@Override
public String toString() {
return this.patternParts.toString();
}

/**
* 获取父级路径列表
*
* @param patternParts 路径列表
* @return 父级路径列表
*/
private static List<String> getParentParts(List<String> patternParts) {
return patternParts.subList(0, patternParts.size() - 1);
}

/**
* 获取Bean中对应表达式的值
*
* @param patternParts 表达式分段列表
* @param bean Bean对象或Map或List等
* @param ignoreLast 是否忽略最后一个值,忽略最后一个值则用于set,否则用于read
* @param list 表达式分段列表
* @param bean Bean对象或Map或List等
* @return 值, 如果对应值不存在, 则返回null
*/
private Object get(final List<String> patternParts, final Object bean, final boolean ignoreLast) {
int length = patternParts.size();
if (ignoreLast) {
length--;
}
private Object get(final List<String> list, final Object bean) {
Object subBean = bean;
boolean isFirst = true;
String patternPart;
for (int i = 0; i < length; i++) {
patternPart = patternParts.get(i);
for (String patternPart : list) {
subBean = getFieldValue(subBean, patternPart);
if (null == subBean) {
// 支持表达式的第一个对象为Bean本身(若用户定义表达式$开头,则不做此操作)
// 支持表达式的第一个对象为Bean本身若用户定义表达式$开头则不做此操作
if (isFirst && false == this.isStartWith && BeanKit.isMatchName(bean, patternPart, true)) {
subBean = bean;
isFirst = false;
Expand Down Expand Up @@ -293,46 +300,4 @@ private void init(final String expression) {
this.patternParts = CollKit.unmodifiable(localPatternParts);
}

/**
* 设置表达式指定位置(或filed对应)的值
* 若表达式指向一个List则设置其坐标对应位置的值,若指向Map则put对应key的值,Bean则设置字段的值
* 注意:
*
* <pre>
* 1. 如果为List,如果下标不大于List长度,则替换原有值,否则追加值
* 2. 如果为数组,如果下标不大于数组长度,则替换原有值,否则追加值
* </pre>
*
* @param bean Bean、Map或List
* @param value 值
*/
public void set(final Object bean, final Object value) {
set(bean, this.patternParts, lastIsNumber(this.patternParts), value);
}

/**
* 设置表达式指定位置(或filed对应)的值
* 若表达式指向一个List则设置其坐标对应位置的值,若指向Map则put对应key的值,Bean则设置字段的值
* 注意:
*
* <pre>
* 1. 如果为List,如果下标不大于List长度,则替换原有值,否则追加值
* 2. 如果为数组,如果下标不大于数组长度,则替换原有值,否则追加值
* </pre>
*
* @param bean Bean、Map或List
* @param patternParts 表达式块列表
* @param value 值
*/
private void set(Object bean, List<String> patternParts, boolean nextNumberPart, Object value) {
Object subBean = this.get(patternParts, bean, true);
if (null == subBean) {
final List<String> parentParts = getParentParts(patternParts);
this.set(bean, parentParts, lastIsNumber(parentParts), nextNumberPart ? new ArrayList<>() : new HashMap<>());
//set中有可能做过转换,因此此处重新获取bean
subBean = this.get(patternParts, bean, true);
}
BeanKit.setFieldValue(subBean, patternParts.get(patternParts.size() - 1), value);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import java.util.Map;

/**
* Bean属性缓存
* 属性缓存
* 缓存用于防止多次反射造成的性能问题
*
* @author Kimi Liu
Expand Down
Loading

0 comments on commit 1369ec8

Please sign in to comment.