From 32b763bbcebb483f0715f944a615bf4822090632 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Apr 2021 16:53:00 +0000 Subject: [PATCH 1/6] Bump commons-io from 2.4 to 2.7 Bumps commons-io from 2.4 to 2.7. Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f15b2a9..a04e793 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ commons-io commons-io - 2.4 + 2.7 commons-lang From 0c626abaa6c450ce12791f1d04c5bc4106f2814f Mon Sep 17 00:00:00 2001 From: chowsanity <344177653@qq.com> Date: Wed, 28 Jul 2021 15:00:04 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=99=A8=E9=93=BE?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=A4=9A=E4=BE=8B=EF=BC=8C=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E5=B9=B6=E5=8F=91=E6=A0=A1=E9=AA=8C=E5=99=A8=E9=93=BE=E7=BC=BA?= =?UTF-8?q?=E5=A4=B1=E6=A0=A1=E9=AA=8C=E5=99=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../validation/detail/FileDetailValidatorChain.java | 2 ++ .../validation/handler/AbstractValidatorHandler.java | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java b/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java index 0ad408f..6d74c15 100644 --- a/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java +++ b/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java @@ -7,6 +7,7 @@ import org.landy.business.validation.ValidatorChain; import org.landy.constants.Constants; import org.landy.exception.BusinessValidationException; +import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import java.util.ArrayList; @@ -19,6 +20,7 @@ * @create 10:41 AM 05/09/2018 */ @Component +@Scope("prototype") public class FileDetailValidatorChain implements ValidatorChain { Map> validatorMap = new HashMap<>(); diff --git a/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java b/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java index a5a6ff5..3dd176c 100644 --- a/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java +++ b/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java @@ -12,6 +12,7 @@ import org.landy.web.utils.ApplicationUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; @@ -30,7 +31,9 @@ public abstract class AbstractValidatorHandler implements ApplicationListener validatorHandlerMap = new HashMap<>(); @Autowired - protected FileDetailValidatorChain fileDetailValidatorChain; + private BeanFactory beanFactory; + + FileDetailValidatorChain fileDetailValidatorChain; public AbstractValidatorHandler() { validatorHandlerMap.put(getWorkflowId(),accessBeanName()); @@ -91,7 +94,7 @@ protected void addValidator(String beanName,Class validator private void addValidators() { List> validators = getValidators(); - + fileDetailValidatorChain = beanFactory.getBean(FileDetailValidatorChain.class); validators.forEach((validator) -> { String simpleName = validator.getSimpleName(); String beanName = simpleName.substring(0, 1).toLowerCase() + simpleName.substring(1); From d810ad0ea47bedb721d80f45c6ef83d624660e09 Mon Sep 17 00:00:00 2001 From: chowsanity <344177653@qq.com> Date: Wed, 28 Jul 2021 15:38:43 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=9B=9E=E6=BB=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../validation/detail/FileDetailValidatorChain.java | 2 -- .../validation/handler/AbstractValidatorHandler.java | 7 ++----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java b/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java index 6d74c15..0ad408f 100644 --- a/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java +++ b/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java @@ -7,7 +7,6 @@ import org.landy.business.validation.ValidatorChain; import org.landy.constants.Constants; import org.landy.exception.BusinessValidationException; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import java.util.ArrayList; @@ -20,7 +19,6 @@ * @create 10:41 AM 05/09/2018 */ @Component -@Scope("prototype") public class FileDetailValidatorChain implements ValidatorChain { Map> validatorMap = new HashMap<>(); diff --git a/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java b/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java index 3dd176c..a5a6ff5 100644 --- a/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java +++ b/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java @@ -12,7 +12,6 @@ import org.landy.web.utils.ApplicationUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; @@ -31,9 +30,7 @@ public abstract class AbstractValidatorHandler implements ApplicationListener validatorHandlerMap = new HashMap<>(); @Autowired - private BeanFactory beanFactory; - - FileDetailValidatorChain fileDetailValidatorChain; + protected FileDetailValidatorChain fileDetailValidatorChain; public AbstractValidatorHandler() { validatorHandlerMap.put(getWorkflowId(),accessBeanName()); @@ -94,7 +91,7 @@ protected void addValidator(String beanName,Class validator private void addValidators() { List> validators = getValidators(); - fileDetailValidatorChain = beanFactory.getBean(FileDetailValidatorChain.class); + validators.forEach((validator) -> { String simpleName = validator.getSimpleName(); String beanName = simpleName.substring(0, 1).toLowerCase() + simpleName.substring(1); From 62f05c5e0ffff8bd2d99e50d303a88c59e9d1c7b Mon Sep 17 00:00:00 2001 From: chowsanity <344177653@qq.com> Date: Thu, 29 Jul 2021 11:24:11 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=B9=B6=E5=8F=91?= =?UTF-8?q?=E5=85=AC=E7=94=A8=E6=A0=A1=E9=AA=8C=E5=99=A8=E9=93=BE=EF=BC=8C?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E6=A0=A1=E9=AA=8C=E5=99=A8=E9=93=BE=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1=E6=A0=A1=E9=AA=8C=E5=99=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../landy/business/validation/Validator.java | 4 ++- .../handler/AbstractValidatorHandler.java | 11 ++++--- .../main/java/org/landy/utils/BeanUtil.java | 29 +++++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/design-patterns-business/src/main/java/org/landy/business/validation/Validator.java b/design-patterns-business/src/main/java/org/landy/business/validation/Validator.java index de75cec..03bc484 100644 --- a/design-patterns-business/src/main/java/org/landy/business/validation/Validator.java +++ b/design-patterns-business/src/main/java/org/landy/business/validation/Validator.java @@ -4,6 +4,8 @@ import org.landy.business.domain.file.RequestFile; import org.landy.exception.BusinessValidationException; +import java.io.Serializable; + /** * 业务校验统一接口,增加了接口的默认方法实现,这样可以更加方便且自由选择实现接口的哪些方法。 * @author landyl @@ -11,7 +13,7 @@ * @version 2.0 * @since 1.0 */ -public interface Validator { +public interface Validator extends Serializable { /** * 需要引入责任链的时候,则采用此方法 diff --git a/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java b/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java index a5a6ff5..ad42a9f 100644 --- a/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java +++ b/design-patterns-business/src/main/java/org/landy/business/validation/handler/AbstractValidatorHandler.java @@ -8,6 +8,7 @@ import org.landy.business.validation.Validator; import org.landy.business.validation.detail.FileDetailValidatorChain; import org.landy.exception.BusinessValidationException; +import org.landy.utils.BeanUtil; import org.landy.utils.PackageUtil; import org.landy.web.utils.ApplicationUtil; import org.slf4j.Logger; @@ -30,7 +31,9 @@ public abstract class AbstractValidatorHandler implements ApplicationListener validatorHandlerMap = new HashMap<>(); @Autowired - protected FileDetailValidatorChain fileDetailValidatorChain; + private FileDetailValidatorChain fileDetailValidatorChain; + + public AbstractValidatorHandler() { validatorHandlerMap.put(getWorkflowId(),accessBeanName()); @@ -45,6 +48,8 @@ public void onApplicationEvent(ContextRefreshedEvent event) { } public String validate(RequestDetail requestDetail, RequestFile requestFile) { + //克隆独立的校验器链 + FileDetailValidatorChain fileDetailValidatorChain = BeanUtil.cloneByStream(this.fileDetailValidatorChain); //must set the current workflowId fileDetailValidatorChain.setWorkflowId(getWorkflowId()); fileDetailValidatorChain.doClearValidatorIndex(getWorkflowId()); @@ -62,7 +67,7 @@ public static final AbstractValidatorHandler accessValidatorHandler(WorkflowEnum LOGGER.error("can not find {}'s component",beanName); throw new BusinessValidationException("can not find "+beanName + "'s component,current UPDATE_WORKFLOW_ID is :" + updateWorkflowId); } - return ApplicationUtil.getApplicationContext().getBean(beanName,AbstractValidatorHandler.class); + return ApplicationUtil.getApplicationContext().getBean(beanName, AbstractValidatorHandler.class); } protected void addValidator(String beanName,Class validator) { @@ -91,7 +96,6 @@ protected void addValidator(String beanName,Class validator private void addValidators() { List> validators = getValidators(); - validators.forEach((validator) -> { String simpleName = validator.getSimpleName(); String beanName = simpleName.substring(0, 1).toLowerCase() + simpleName.substring(1); @@ -99,7 +103,6 @@ private void addValidators() { LOGGER.info("Added validator:{},spring bean name is:{}",simpleName,beanName); Validator validatorInstance = ApplicationUtil.getApplicationContext().getBean(beanName,validator); - fileDetailValidatorChain.addValidator(validatorInstance,getWorkflowId()); }); diff --git a/design-patterns-core/src/main/java/org/landy/utils/BeanUtil.java b/design-patterns-core/src/main/java/org/landy/utils/BeanUtil.java index d58351a..8e94a45 100644 --- a/design-patterns-core/src/main/java/org/landy/utils/BeanUtil.java +++ b/design-patterns-core/src/main/java/org/landy/utils/BeanUtil.java @@ -2,7 +2,12 @@ import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.PropertyUtils; +import org.springframework.util.FastByteArrayOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; import java.lang.reflect.InvocationTargetException; public class BeanUtil { @@ -45,4 +50,28 @@ public static Class getPropertyType(Object bean, String name) { return null; } + /** + * 序列化后拷贝流的方式克隆
+ * 对象必须实现Serializable接口 + * + * @param 对象类型 + * @param obj 被克隆对象 + * @return 克隆后的对象 + */ + @SuppressWarnings("unchecked") + public static T cloneByStream(T obj) { + if (!(obj instanceof Serializable)) { + return null; + } + final FastByteArrayOutputStream byteOut = new FastByteArrayOutputStream(); + try (ObjectOutputStream out = new ObjectOutputStream(byteOut)) { + out.writeObject(obj); + out.flush(); + final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteOut.toByteArray())); + return (T) in.readObject(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } From e38a808edace57a6c544b63d130e7bb5626784b3 Mon Sep 17 00:00:00 2001 From: chowsanity <344177653@qq.com> Date: Thu, 29 Jul 2021 11:26:09 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=B9=B6=E5=8F=91?= =?UTF-8?q?=E5=85=AC=E7=94=A8=E6=A0=A1=E9=AA=8C=E5=99=A8=E9=93=BE=EF=BC=8C?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E6=A0=A1=E9=AA=8C=E5=99=A8=E9=93=BE=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1=E6=A0=A1=E9=AA=8C=E5=99=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/validation/detail/FileDetailValidatorChain.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java b/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java index 0ad408f..f8fdde3 100644 --- a/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java +++ b/design-patterns-business/src/main/java/org/landy/business/validation/detail/FileDetailValidatorChain.java @@ -9,6 +9,7 @@ import org.landy.exception.BusinessValidationException; import org.springframework.stereotype.Component; +import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -19,7 +20,7 @@ * @create 10:41 AM 05/09/2018 */ @Component -public class FileDetailValidatorChain implements ValidatorChain { +public class FileDetailValidatorChain implements ValidatorChain, Serializable { Map> validatorMap = new HashMap<>(); Map validatorIndexMap = new HashMap<>(); From 21f787592b57375fc2dc35f5d3b67626490187b5 Mon Sep 17 00:00:00 2001 From: chowsanity <344177653@qq.com> Date: Thu, 29 Jul 2021 12:18:05 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=85=8B=E9=9A=86?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=B5=81=E6=9C=AA=E5=85=B3=E9=97=AD=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/landy/utils/BeanUtil.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/design-patterns-core/src/main/java/org/landy/utils/BeanUtil.java b/design-patterns-core/src/main/java/org/landy/utils/BeanUtil.java index 8e94a45..4b9b329 100644 --- a/design-patterns-core/src/main/java/org/landy/utils/BeanUtil.java +++ b/design-patterns-core/src/main/java/org/landy/utils/BeanUtil.java @@ -64,13 +64,24 @@ public static T cloneByStream(T obj) { return null; } final FastByteArrayOutputStream byteOut = new FastByteArrayOutputStream(); - try (ObjectOutputStream out = new ObjectOutputStream(byteOut)) { + ObjectOutputStream out = null; + //noinspection TryFinallyCanBeTryWithResources + try { + out = new ObjectOutputStream(byteOut); out.writeObject(obj); out.flush(); final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteOut.toByteArray())); return (T) in.readObject(); } catch (Exception e) { throw new RuntimeException(e); + } finally { + if (null != out) { + try { + out.close(); + } catch (Exception e) { + // 静默关闭 + } + } } }