From 4403d68eae622e1fa1366da7712c23aab2c86dc0 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Fri, 11 Apr 2025 21:34:31 +0800 Subject: [PATCH 01/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/module/entity/ModuleDefinition.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java index b0974e11..964c66b8 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java @@ -48,8 +48,8 @@ public class ModuleDefinition { private List exports; private List requires; private List provides; - private List publishes; - private List consumes; + private List notifies; + private List waits; private String tablePrefix; public ModuleDefinition(Resource resource, Manifest manifest) { @@ -73,8 +73,8 @@ public class ModuleDefinition { String exports = mainAttributes.getValue("Dorive-Exports"); String requires = mainAttributes.getValue("Dorive-Requires"); String provides = mainAttributes.getValue("Dorive-Provides"); - String publishes = mainAttributes.getValue("Dorive-Publishes"); - String consumes = mainAttributes.getValue("Dorive-Consumes"); + String notifies = mainAttributes.getValue("Dorive-Notifies"); + String waits = mainAttributes.getValue("Dorive-Waits"); String tablePrefix = mainAttributes.getValue("Dorive-Table-Prefix"); this.originId = filterValue(originId); @@ -91,8 +91,8 @@ public class ModuleDefinition { this.exports = filterValues(exports); this.requires = filterValues(requires); this.provides = filterValues(provides); - this.publishes = filterValues(publishes); - this.consumes = filterValues(consumes); + this.notifies = filterValues(notifies); + this.waits = filterValues(waits); this.tablePrefix = filterValue(tablePrefix); } -- Gitee From c29f4e5f3c375134af0ea33d49739534ec592bf1 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Fri, 11 Apr 2025 23:13:56 +0800 Subject: [PATCH 02/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/api/annotation/core/Repository.java | 10 +++++----- .../dorive/api/entity/core/def/RepositoryDef.java | 4 ++-- .../core/repository/AbstractContextRepository.java | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/core/Repository.java b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/core/Repository.java index 1af14a21..f93f0515 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/core/Repository.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/core/Repository.java @@ -45,11 +45,6 @@ public @interface Repository { */ Class factory() default Object.class; - /** - * 边界上下文 - */ - String boundedContext() default ""; - /** * 派生 */ @@ -65,4 +60,9 @@ public @interface Repository { */ Class[] queries() default {}; + /** + * 边界上下文 + */ + String boundedContext() default ""; + } diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/def/RepositoryDef.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/def/RepositoryDef.java index f2b30901..60eb2500 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/def/RepositoryDef.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/def/RepositoryDef.java @@ -32,10 +32,10 @@ public class RepositoryDef { private String value; private Class dataSource; private Class factory; - private String boundedContext; private Class[] derived; private Class[] events; private Class[] queries; + private String boundedContext; public static RepositoryDef fromElement(AnnotatedElement element) { Repository repository = AnnotatedElementUtils.getMergedAnnotation(element, Repository.class); @@ -44,10 +44,10 @@ public class RepositoryDef { repositoryDef.setValue(repository.value()); repositoryDef.setDataSource(repository.dataSource()); repositoryDef.setFactory(repository.factory()); - repositoryDef.setBoundedContext(repository.boundedContext()); repositoryDef.setDerived(repository.derived()); repositoryDef.setEvents(repository.events()); repositoryDef.setQueries(repository.queries()); + repositoryDef.setBoundedContext(repository.boundedContext()); return repositoryDef; } return null; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java index ec30eac7..613f7e80 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java @@ -218,7 +218,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor if (StringUtils.isNotBlank(boundedContextName)) { defaultEntityFactory.setBoundedContextName(boundedContextName); if (applicationContext.containsBean(boundedContextName)) { - BoundedContext boundedContext = (BoundedContext) applicationContext.getBean(boundedContextName); + BoundedContext boundedContext = applicationContext.getBean(boundedContextName, BoundedContext.class); defaultEntityFactory.setBoundedContext(boundedContext); } } -- Gitee From 0c477a559349cfa5b852ec482d9929fd17fd237b Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 12 Apr 2025 16:24:03 +0800 Subject: [PATCH 03/43] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=90=8C=E6=97=B6=E5=85=AC=E5=BC=80=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E8=BE=B9=E7=95=8C=E4=B8=8A=E4=B8=8B=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api}/entity/common/BoundedContext.java | 2 +- .../impl/factory/DefaultEntityFactory.java | 2 +- .../repository/AbstractContextRepository.java | 2 +- dorive-module/pom.xml | 17 +++------- .../module/entity/ModuleDefinition.java | 11 ++++++ .../ModuleDefaultListableBeanFactory.java | 34 +++++++++++++------ 6 files changed, 42 insertions(+), 26 deletions(-) rename {dorive-core/src/main/java/com/gitee/dorive/core => dorive-api/src/main/java/com/gitee/dorive/api}/entity/common/BoundedContext.java (95%) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/common/BoundedContext.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/common/BoundedContext.java similarity index 95% rename from dorive-core/src/main/java/com/gitee/dorive/core/entity/common/BoundedContext.java rename to dorive-api/src/main/java/com/gitee/dorive/api/entity/common/BoundedContext.java index 0f677031..3b266a46 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/common/BoundedContext.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/common/BoundedContext.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.entity.common; +package com.gitee.dorive.api.entity.common; import lombok.NoArgsConstructor; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java index 7a2b2295..fd88667f 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java @@ -26,7 +26,7 @@ import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.factory.EntityAdapter; import com.gitee.dorive.core.api.factory.EntityFactory; import com.gitee.dorive.core.api.factory.EntityMapper; -import com.gitee.dorive.core.entity.common.BoundedContext; +import com.gitee.dorive.api.entity.common.BoundedContext; import com.gitee.dorive.core.entity.common.EntityStoreInfo; import com.gitee.dorive.core.entity.enums.Domain; import com.gitee.dorive.core.entity.factory.FieldConverter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java index 613f7e80..62c8a176 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java @@ -35,7 +35,7 @@ import com.gitee.dorive.core.api.executor.Executor; import com.gitee.dorive.core.api.factory.EntityFactory; import com.gitee.dorive.core.api.factory.EntityMapper; import com.gitee.dorive.core.config.RepositoryContext; -import com.gitee.dorive.core.entity.common.BoundedContext; +import com.gitee.dorive.api.entity.common.BoundedContext; import com.gitee.dorive.core.entity.common.EntityStoreInfo; import com.gitee.dorive.core.entity.executor.OrderBy; import com.gitee.dorive.core.entity.factory.FieldConverter; diff --git a/dorive-module/pom.xml b/dorive-module/pom.xml index 448dfb92..2efbd86d 100644 --- a/dorive-module/pom.xml +++ b/dorive-module/pom.xml @@ -11,20 +11,13 @@ dorive-module - org.springframework.boot - spring-boot-starter-web - - - org.projectlombok - lombok + com.gitee.digital-engine + dorive-api + ${project.version} - org.apache.commons - commons-lang3 - - - cn.hutool - hutool-all + org.springframework.boot + spring-boot-starter-web \ No newline at end of file diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java index 964c66b8..a407457f 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java @@ -125,6 +125,17 @@ public class ModuleDefinition { return CollUtil.findOne(exports, export -> PATH_MATCHER.match(export, className)) != null; } + public String getDomainPackage() { + List packages = new ArrayList<>(2); + if (StringUtils.isNotBlank(project)) { + packages.add(project); + } + if (StringUtils.isNotBlank(domain)) { + packages.add(domain); + } + return StrUtil.join(".", packages); + } + public String getBasePackage() { List packages = new ArrayList<>(4); if (StringUtils.isNotBlank(project)) { diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java index ed87af7e..74a60228 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java @@ -19,11 +19,12 @@ package com.gitee.dorive.module.impl.factory; import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ReflectUtil; +import com.gitee.dorive.api.entity.common.BoundedContext; import com.gitee.dorive.module.api.BeanNameEditor; import com.gitee.dorive.module.api.ModuleParser; import com.gitee.dorive.module.entity.ModuleDefinition; -import com.gitee.dorive.module.impl.inject.ModuleCglibSubclassingInstantiationStrategy; import com.gitee.dorive.module.impl.environment.ModuleContextAnnotationAutowireCandidateResolver; +import com.gitee.dorive.module.impl.inject.ModuleCglibSubclassingInstantiationStrategy; import com.gitee.dorive.module.impl.parser.DefaultModuleParser; import com.gitee.dorive.module.impl.util.ConfigurationUtils; import lombok.Getter; @@ -39,9 +40,7 @@ import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.MethodMetadata; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; import static com.gitee.dorive.module.impl.util.BeanAnnotationHelper.BEAN_NAME_CACHE; @@ -105,7 +104,7 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(declaringClass); if (moduleDefinition != null) { List candidateBeanNames = new ArrayList<>(candidates.size()); - List exposedCandidateBeanNames = new ArrayList<>(candidates.size()); + Set exposedCandidateBeanNames = new HashSet<>(candidates.size() * 4 / 3 + 1); for (String candidateBeanName : candidates.keySet()) { Class targetClass = null; // class of factory bean @@ -121,21 +120,34 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory } if (moduleParser.isUnderScanPackage(targetClass.getName())) { ModuleDefinition targetModuleDefinition = moduleParser.findModuleDefinition(targetClass); - // 1、相同模块 - // 2、模块内对外公开 - if (moduleDefinition.equals(targetModuleDefinition)) { + if (moduleDefinition.equals(targetModuleDefinition)) { // 1、相同模块 candidateBeanNames.add(candidateBeanName); - } else if (targetModuleDefinition.isExposed(targetClass)) { + } else if (targetModuleDefinition.isExposed(targetClass)) { // 2、其他模块对外公开 exposedCandidateBeanNames.add(candidateBeanName); } } } + // 1、相同模块 if (candidateBeanNames.size() == 1) { return candidateBeanNames.get(0); } - if (candidateBeanNames.isEmpty() && exposedCandidateBeanNames.size() == 1) { - return exposedCandidateBeanNames.get(0); + // 2、其他模块对外公开 + if (candidateBeanNames.isEmpty()) { + Class declaredType = descriptor.getDeclaredType(); + if (declaredType == BoundedContext.class) { + if (!exposedCandidateBeanNames.isEmpty()) { + String domainPackage = moduleDefinition.getDomainPackage(); + String boundedContextName = domainPackage + ".boundedContext"; + if (exposedCandidateBeanNames.contains(boundedContextName)) { + return boundedContextName; + } + } + } else { + if (exposedCandidateBeanNames.size() == 1) { + return exposedCandidateBeanNames.iterator().next(); + } + } } } } -- Gitee From df717470473ce0a51f2f9ba6ae68612790bc5e26 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 12 Apr 2025 16:40:29 +0800 Subject: [PATCH 04/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/module/impl/parser/AbstractModuleParser.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java index 59615633..825b807e 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java @@ -55,7 +55,7 @@ public abstract class AbstractModuleParser implements ModuleParser { public void parse() { parseModuleDefinitions(); collectScanPackages(); - checkRequiresAndImpls(); + checkRequiresAndProvides(); } private void parseModuleDefinitions() { @@ -108,7 +108,7 @@ public abstract class AbstractModuleParser implements ModuleParser { this.scanPackages.addAll(scanPackages); } - private void checkRequiresAndImpls() { + private void checkRequiresAndProvides() { Set requires = new HashSet<>(); Set provides = new HashSet<>(); for (ModuleDefinition moduleDefinition : getModuleDefinitions()) { -- Gitee From 68b70116d79edc6cf7199654c10bd2e3fbe5a798 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 12 Apr 2025 16:41:44 +0800 Subject: [PATCH 05/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/module/impl/parser/AbstractModuleParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java index 825b807e..f14fb0db 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java @@ -117,7 +117,7 @@ public abstract class AbstractModuleParser implements ModuleParser { } Collection collection = CollectionUtil.subtract(requires, provides); if (!collection.isEmpty()) { - throw new RuntimeException("Lack of required services! service: " + StrUtil.join(", ", collection)); + throw new RuntimeException("Lack of required resources! resources: " + StrUtil.join(", ", collection)); } } -- Gitee From 8aa5c034632101c751c2f125fcd8229482129e85 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 12 Apr 2025 16:45:00 +0800 Subject: [PATCH 06/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleDefaultListableBeanFactory.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java index 74a60228..f2008773 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java @@ -135,19 +135,16 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory // 2、其他模块对外公开 if (candidateBeanNames.isEmpty()) { Class declaredType = descriptor.getDeclaredType(); - if (declaredType == BoundedContext.class) { - if (!exposedCandidateBeanNames.isEmpty()) { - String domainPackage = moduleDefinition.getDomainPackage(); - String boundedContextName = domainPackage + ".boundedContext"; - if (exposedCandidateBeanNames.contains(boundedContextName)) { - return boundedContextName; - } - } - } else { - if (exposedCandidateBeanNames.size() == 1) { - return exposedCandidateBeanNames.iterator().next(); + if (declaredType == BoundedContext.class && !exposedCandidateBeanNames.isEmpty()) { + String domainPackage = moduleDefinition.getDomainPackage(); + String boundedContextName = domainPackage + ".boundedContext"; + if (exposedCandidateBeanNames.contains(boundedContextName)) { + return boundedContextName; } } + if (exposedCandidateBeanNames.size() == 1) { + return exposedCandidateBeanNames.iterator().next(); + } } } } -- Gitee From 49e9db80ccb38d671d88906e4cfd10cec6dd0647 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 12 Apr 2025 18:09:21 +0800 Subject: [PATCH 07/43] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8F=96=E5=80=BC?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/factory/ModuleDefaultListableBeanFactory.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java index f2008773..e8566e65 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java @@ -99,7 +99,10 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory protected String determineAutowireCandidate(Map candidates, DependencyDescriptor descriptor) { String beanName = super.determineAutowireCandidate(candidates, descriptor); if (beanName == null && candidates.size() > 1) { - Class declaringClass = (Class) ReflectUtil.getFieldValue(descriptor, "declaringClass"); + Class declaringClass = (Class) ReflectUtil.getFieldValue(descriptor, "containingClass"); + if (declaringClass == null) { + declaringClass = (Class) ReflectUtil.getFieldValue(descriptor, "declaringClass"); + } if (moduleParser.isUnderScanPackage(declaringClass.getName())) { ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(declaringClass); if (moduleDefinition != null) { -- Gitee From d854f59c24de38b2241e4f34928bde1b6f7e642f Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 12 Apr 2025 21:55:52 +0800 Subject: [PATCH 08/43] =?UTF-8?q?=E6=96=B0=E5=A2=9EBoundedContextAware?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dorive/api/api/BoundedContextAware.java | 26 ++++++++ .../module/DoriveModuleConfiguration.java | 7 ++ .../repository/AbstractContextRepository.java | 31 ++++++--- .../BoundedContextBeanPostProcessor.java | 65 +++++++++++++++++++ 4 files changed, 119 insertions(+), 10 deletions(-) create mode 100644 dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java create mode 100644 dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java b/dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java new file mode 100644 index 00000000..cdf02105 --- /dev/null +++ b/dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.gitee.dorive.api.api; + +import com.gitee.dorive.api.entity.common.BoundedContext; + +public interface BoundedContextAware { + + void setBoundedContext(BoundedContext boundedContext); + +} diff --git a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java index f88d29e4..79b85849 100644 --- a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java +++ b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java @@ -17,6 +17,7 @@ package com.gitee.dorive.autoconfigure.module; +import com.gitee.dorive.module.impl.inject.BoundedContextBeanPostProcessor; import com.gitee.dorive.module.impl.inject.ModuleAutowiredBeanPostProcessor; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -29,6 +30,12 @@ import org.springframework.core.annotation.Order; @ConditionalOnProperty(prefix = "dorive.module", name = "enable", havingValue = "true") public class DoriveModuleConfiguration { + @Bean("boundedContextBeanPostProcessorV3") + @ConditionalOnMissingClass + public static BoundedContextBeanPostProcessor boundedContextBeanPostProcessor() { + return new BoundedContextBeanPostProcessor(); + } + @Bean("moduleAutowiredBeanPostProcessorV3") @ConditionalOnMissingClass public static ModuleAutowiredBeanPostProcessor moduleAutowiredBeanPostProcessor() { diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java index 62c8a176..eb32ddc8 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java @@ -19,6 +19,7 @@ package com.gitee.dorive.core.repository; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.gitee.dorive.api.api.BoundedContextAware; import com.gitee.dorive.api.constant.core.Order; import com.gitee.dorive.api.entity.core.EntityDefinition; import com.gitee.dorive.api.entity.core.EntityElement; @@ -66,9 +67,11 @@ import java.util.concurrent.ConcurrentHashMap; @Getter @Setter -public abstract class AbstractContextRepository extends AbstractRepository implements ApplicationContextAware, InitializingBean { +public abstract class AbstractContextRepository extends AbstractRepository implements ApplicationContextAware, BoundedContextAware, InitializingBean { private ApplicationContext applicationContext; + private BoundedContext boundedContext; + private RepositoryDef repositoryDef; private Map repositoryMap = new LinkedHashMap<>(); private CommonRepository rootRepository; @@ -81,6 +84,11 @@ public abstract class AbstractContextRepository extends AbstractRepositor this.applicationContext = applicationContext; } + @Override + public void setBoundedContext(BoundedContext boundedContext) { + this.boundedContext = boundedContext; + } + @Override public void afterPropertiesSet() throws Exception { Class repositoryClass = this.getClass(); @@ -88,6 +96,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor prepareRepositoryDef(repositoryClass, entityClass); Assert.notNull(repositoryDef, "The @Repository does not exist! type: {}", repositoryClass.getName()); + resetBoundedContextIfNecessary(); EntityDefinitionResolver entityDefinitionResolver = new EntityDefinitionResolver(); EntityDefinition entityDefinition = entityDefinitionResolver.resolve(entityClass); @@ -120,6 +129,15 @@ public abstract class AbstractContextRepository extends AbstractRepositor } } + protected void resetBoundedContextIfNecessary() { + String boundedContextName = repositoryDef.getBoundedContext(); + if (StringUtils.isNotBlank(boundedContextName)) { + if (applicationContext.containsBean(boundedContextName)) { + this.boundedContext = applicationContext.getBean(boundedContextName, BoundedContext.class); + } + } + } + private CommonRepository newRepository(EntityElement entityElement) { resetEntityDef(entityElement); @@ -213,15 +231,8 @@ public abstract class AbstractContextRepository extends AbstractRepositor defaultEntityFactory.setEntityElement(entityElement); defaultEntityFactory.setEntityStoreInfo(entityStoreInfo); defaultEntityFactory.setEntityMapper(entityMapper); - // 边界上下文 - String boundedContextName = repositoryDef.getBoundedContext(); - if (StringUtils.isNotBlank(boundedContextName)) { - defaultEntityFactory.setBoundedContextName(boundedContextName); - if (applicationContext.containsBean(boundedContextName)) { - BoundedContext boundedContext = applicationContext.getBean(boundedContextName, BoundedContext.class); - defaultEntityFactory.setBoundedContext(boundedContext); - } - } + defaultEntityFactory.setBoundedContextName(repositoryDef.getBoundedContext()); + defaultEntityFactory.setBoundedContext(boundedContext); } return entityFactory; } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java new file mode 100644 index 00000000..8ceadc4a --- /dev/null +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.gitee.dorive.module.impl.inject; + +import com.gitee.dorive.api.api.BoundedContextAware; +import com.gitee.dorive.api.entity.common.BoundedContext; +import com.gitee.dorive.module.api.ModuleParser; +import com.gitee.dorive.module.entity.ModuleDefinition; +import com.gitee.dorive.module.impl.parser.DefaultModuleParser; +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.util.ClassUtils; + +@Getter +@Setter +public class BoundedContextBeanPostProcessor implements BeanFactoryAware, BeanPostProcessor { + + private ModuleParser moduleParser = DefaultModuleParser.INSTANCE; + private DefaultListableBeanFactory beanFactory; + + @Override + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + this.beanFactory = (DefaultListableBeanFactory) beanFactory; + } + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + Class userClass = ClassUtils.getUserClass(bean); + if (moduleParser.isUnderScanPackage(userClass.getName())) { + if (bean instanceof BoundedContextAware) { + ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(userClass); + if (moduleDefinition != null) { + String domainPackage = moduleDefinition.getDomainPackage(); + String boundedContextName = domainPackage + ".boundedContext"; + if (beanFactory.containsBean(boundedContextName)) { + BoundedContext boundedContext = beanFactory.getBean(boundedContextName, BoundedContext.class); + ((BoundedContextAware) bean).setBoundedContext(boundedContext); + } + } + } + } + return bean; + } + +} -- Gitee From 29a2c4754f79b7efa2e474f0595e402d90d3e136 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 12 Apr 2025 21:59:36 +0800 Subject: [PATCH 09/43] =?UTF-8?q?=E6=96=B0=E5=A2=9EBoundedContextAware?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/gitee/dorive/api/api/BoundedContextAware.java | 2 +- .../gitee/dorive/api/entity/{common => }/BoundedContext.java | 2 +- .../gitee/dorive/core/impl/factory/DefaultEntityFactory.java | 2 +- .../gitee/dorive/core/repository/AbstractContextRepository.java | 2 +- .../module/impl/factory/ModuleDefaultListableBeanFactory.java | 2 +- .../module/impl/inject/BoundedContextBeanPostProcessor.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename dorive-api/src/main/java/com/gitee/dorive/api/entity/{common => }/BoundedContext.java (95%) diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java b/dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java index cdf02105..0433a048 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java @@ -17,7 +17,7 @@ package com.gitee.dorive.api.api; -import com.gitee.dorive.api.entity.common.BoundedContext; +import com.gitee.dorive.api.entity.BoundedContext; public interface BoundedContextAware { diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/common/BoundedContext.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/BoundedContext.java similarity index 95% rename from dorive-api/src/main/java/com/gitee/dorive/api/entity/common/BoundedContext.java rename to dorive-api/src/main/java/com/gitee/dorive/api/entity/BoundedContext.java index 3b266a46..d770c46d 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/common/BoundedContext.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/BoundedContext.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.api.entity.common; +package com.gitee.dorive.api.entity; import lombok.NoArgsConstructor; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java index fd88667f..5367f246 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java @@ -26,7 +26,7 @@ import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.factory.EntityAdapter; import com.gitee.dorive.core.api.factory.EntityFactory; import com.gitee.dorive.core.api.factory.EntityMapper; -import com.gitee.dorive.api.entity.common.BoundedContext; +import com.gitee.dorive.api.entity.BoundedContext; import com.gitee.dorive.core.entity.common.EntityStoreInfo; import com.gitee.dorive.core.entity.enums.Domain; import com.gitee.dorive.core.entity.factory.FieldConverter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java index eb32ddc8..4ff43d6e 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java @@ -36,7 +36,7 @@ import com.gitee.dorive.core.api.executor.Executor; import com.gitee.dorive.core.api.factory.EntityFactory; import com.gitee.dorive.core.api.factory.EntityMapper; import com.gitee.dorive.core.config.RepositoryContext; -import com.gitee.dorive.api.entity.common.BoundedContext; +import com.gitee.dorive.api.entity.BoundedContext; import com.gitee.dorive.core.entity.common.EntityStoreInfo; import com.gitee.dorive.core.entity.executor.OrderBy; import com.gitee.dorive.core.entity.factory.FieldConverter; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java index e8566e65..bfbe927b 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java @@ -19,7 +19,7 @@ package com.gitee.dorive.module.impl.factory; import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ReflectUtil; -import com.gitee.dorive.api.entity.common.BoundedContext; +import com.gitee.dorive.api.entity.BoundedContext; import com.gitee.dorive.module.api.BeanNameEditor; import com.gitee.dorive.module.api.ModuleParser; import com.gitee.dorive.module.entity.ModuleDefinition; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java index 8ceadc4a..275e390e 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java @@ -18,7 +18,7 @@ package com.gitee.dorive.module.impl.inject; import com.gitee.dorive.api.api.BoundedContextAware; -import com.gitee.dorive.api.entity.common.BoundedContext; +import com.gitee.dorive.api.entity.BoundedContext; import com.gitee.dorive.module.api.ModuleParser; import com.gitee.dorive.module.entity.ModuleDefinition; import com.gitee.dorive.module.impl.parser.DefaultModuleParser; -- Gitee From ef313ed41f0b39ec0add0521c31ac9786ba90acf Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 13 Apr 2025 12:51:51 +0800 Subject: [PATCH 10/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/module/api/ModuleChecker.java | 2 +- .../dorive/module/impl/parser/DefaultModuleParser.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/api/ModuleChecker.java b/dorive-module/src/main/java/com/gitee/dorive/module/api/ModuleChecker.java index ffef6d7e..28776698 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/api/ModuleChecker.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/api/ModuleChecker.java @@ -19,6 +19,6 @@ package com.gitee.dorive.module.api; public interface ModuleChecker { - void checkInjection(Class type, Class injectedType, Object injectedInstance); + void checkInjection(Class type, Class injectedType, Object injectedBean); } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/DefaultModuleParser.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/DefaultModuleParser.java index c4953ff4..dbba0c81 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/DefaultModuleParser.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/DefaultModuleParser.java @@ -27,10 +27,10 @@ public class DefaultModuleParser extends AbstractModuleParser implements ModuleC public static final DefaultModuleParser INSTANCE = new DefaultModuleParser(); @Override - public void checkInjection(Class type, Class injectedType, Object injectedInstance) { + public void checkInjection(Class type, Class injectedType, Object injectedBean) { doCheckInjection(type, injectedType); - if (injectedInstance != null) { - Class targetClass = AopUtils.getTargetClass(injectedInstance); + if (injectedBean != null) { + Class targetClass = AopUtils.getTargetClass(injectedBean); if (!injectedType.equals(targetClass)) { doCheckInjection(type, targetClass); } -- Gitee From 6f598b23afc21bf267ff72372986d960e21c5b80 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 13 Apr 2025 17:20:15 +0800 Subject: [PATCH 11/43] =?UTF-8?q?=E6=96=B0=E5=A2=9EExposedBeanFilter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/DoriveModuleConfiguration.java | 7 + .../ExposedBeanFilter.java} | 13 +- .../ModuleDefaultListableBeanFactory.java | 127 +++++++++++++----- .../BoundedContextExposedBeanFilter.java | 44 ++++++ .../ModuleAutowiredBeanPostProcessor.java | 4 +- .../impl/parser/DefaultModuleParser.java | 4 +- .../impl/util/BeanAnnotationHelper.java | 5 +- .../module/impl/util/BeanFactoryUtils.java | 2 +- .../module/impl/util/SpringClassUtils.java | 46 +++++++ 9 files changed, 204 insertions(+), 48 deletions(-) rename dorive-module/src/main/java/com/gitee/dorive/module/{impl/util/ConfigurationUtils.java => api/ExposedBeanFilter.java} (60%) create mode 100644 dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java create mode 100644 dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java diff --git a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java index 79b85849..bd5f595f 100644 --- a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java +++ b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java @@ -17,6 +17,7 @@ package com.gitee.dorive.autoconfigure.module; +import com.gitee.dorive.module.impl.filter.BoundedContextExposedBeanFilter; import com.gitee.dorive.module.impl.inject.BoundedContextBeanPostProcessor; import com.gitee.dorive.module.impl.inject.ModuleAutowiredBeanPostProcessor; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; @@ -30,6 +31,12 @@ import org.springframework.core.annotation.Order; @ConditionalOnProperty(prefix = "dorive.module", name = "enable", havingValue = "true") public class DoriveModuleConfiguration { + @Bean("boundedContextExposedBeanFilterV3") + @ConditionalOnMissingClass + public static BoundedContextExposedBeanFilter boundedContextExposedBeanFilter() { + return new BoundedContextExposedBeanFilter(); + } + @Bean("boundedContextBeanPostProcessorV3") @ConditionalOnMissingClass public static BoundedContextBeanPostProcessor boundedContextBeanPostProcessor() { diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/ConfigurationUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/api/ExposedBeanFilter.java similarity index 60% rename from dorive-module/src/main/java/com/gitee/dorive/module/impl/util/ConfigurationUtils.java rename to dorive-module/src/main/java/com/gitee/dorive/module/api/ExposedBeanFilter.java index 5a15a9f9..13b4701f 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/ConfigurationUtils.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/api/ExposedBeanFilter.java @@ -15,16 +15,15 @@ * limitations under the License. */ -package com.gitee.dorive.module.impl.util; +package com.gitee.dorive.module.api; -import org.springframework.beans.factory.config.BeanDefinition; +import com.gitee.dorive.module.entity.ModuleDefinition; +import org.springframework.beans.factory.config.DependencyDescriptor; -public class ConfigurationUtils { +import java.util.Map; - public static final String CONFIGURATION_CLASS_BEAN_DEFINITION_CLASS_NAME = "org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$ConfigurationClassBeanDefinition"; +public interface ExposedBeanFilter { - public static boolean isConfigurationBeanDefinition(BeanDefinition beanDefinition) { - return CONFIGURATION_CLASS_BEAN_DEFINITION_CLASS_NAME.equals(beanDefinition.getClass().getName()); - } + void filterExposedCandidates(DependencyDescriptor descriptor, ModuleDefinition moduleDefinition, Map exposedCandidates); } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java index bfbe927b..05a3a88b 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java @@ -19,14 +19,14 @@ package com.gitee.dorive.module.impl.factory; import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ReflectUtil; -import com.gitee.dorive.api.entity.BoundedContext; import com.gitee.dorive.module.api.BeanNameEditor; +import com.gitee.dorive.module.api.ExposedBeanFilter; import com.gitee.dorive.module.api.ModuleParser; import com.gitee.dorive.module.entity.ModuleDefinition; import com.gitee.dorive.module.impl.environment.ModuleContextAnnotationAutowireCandidateResolver; import com.gitee.dorive.module.impl.inject.ModuleCglibSubclassingInstantiationStrategy; import com.gitee.dorive.module.impl.parser.DefaultModuleParser; -import com.gitee.dorive.module.impl.util.ConfigurationUtils; +import com.gitee.dorive.module.impl.util.SpringClassUtils; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; @@ -36,11 +36,16 @@ import org.springframework.beans.factory.config.DependencyDescriptor; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.annotation.Bean; +import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.MethodMetadata; +import org.springframework.util.ClassUtils; import java.lang.reflect.Method; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static com.gitee.dorive.module.impl.util.BeanAnnotationHelper.BEAN_NAME_CACHE; @@ -49,6 +54,7 @@ import static com.gitee.dorive.module.impl.util.BeanAnnotationHelper.BEAN_NAME_C public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory implements BeanNameEditor { private ModuleParser moduleParser = DefaultModuleParser.INSTANCE; + private List exposedBeanFilters; public ModuleDefaultListableBeanFactory() { // 实例化策略 @@ -59,7 +65,7 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory @Override public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException { - if (ConfigurationUtils.isConfigurationBeanDefinition(beanDefinition)) { + if (SpringClassUtils.isConfigurationBeanDefinition(beanDefinition)) { beanName = resetBeanName(beanName, beanDefinition, this); } super.registerBeanDefinition(beanName, beanDefinition); @@ -95,39 +101,58 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory return beanName; } + @Override + protected Map findAutowireCandidates(String beanName, Class requiredType, DependencyDescriptor descriptor) { + Map candidates = super.findAutowireCandidates(beanName, requiredType, descriptor); + if (candidates.size() == 1) { + if (!SpringClassUtils.isStreamDependencyDescriptor(descriptor) && !SpringClassUtils.isMultiElementDescriptor(descriptor)) { + Class declaringClass = getDeclaringClass(descriptor); + if (moduleParser.isUnderScanPackage(declaringClass.getName())) { + ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(declaringClass); + if (moduleDefinition != null) { + String candidateBeanName = candidates.keySet().iterator().next(); + Class targetClass = getTargetClass(candidates, candidateBeanName); + if (moduleParser.isUnderScanPackage(targetClass.getName())) { + ModuleDefinition targetModuleDefinition = moduleParser.findModuleDefinition(targetClass); + if (moduleDefinition.equals(targetModuleDefinition)) { // 1、相同模块 + return candidates; + + } else if (targetModuleDefinition.isExposed(targetClass)) { // 2、其他模块对外公开 + Map exposedCandidates = new HashMap<>(2); + exposedCandidates.put(candidateBeanName, targetModuleDefinition); + // 过滤 + invokeExposedBeanFilters(descriptor, moduleDefinition, exposedCandidates); + if (exposedCandidates.isEmpty()) { + candidates.clear(); + } + } + } + } + } + } + } + return candidates; + } + @Override protected String determineAutowireCandidate(Map candidates, DependencyDescriptor descriptor) { String beanName = super.determineAutowireCandidate(candidates, descriptor); if (beanName == null && candidates.size() > 1) { - Class declaringClass = (Class) ReflectUtil.getFieldValue(descriptor, "containingClass"); - if (declaringClass == null) { - declaringClass = (Class) ReflectUtil.getFieldValue(descriptor, "declaringClass"); - } + Class declaringClass = getDeclaringClass(descriptor); if (moduleParser.isUnderScanPackage(declaringClass.getName())) { ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(declaringClass); if (moduleDefinition != null) { List candidateBeanNames = new ArrayList<>(candidates.size()); - Set exposedCandidateBeanNames = new HashSet<>(candidates.size() * 4 / 3 + 1); + Map exposedCandidates = new HashMap<>(candidates.size() * 4 / 3 + 1); for (String candidateBeanName : candidates.keySet()) { - Class targetClass = null; - // class of factory bean - BeanDefinition beanDefinition = getBeanDefinition(candidateBeanName); - if (ConfigurationUtils.isConfigurationBeanDefinition(beanDefinition)) { - AnnotationMetadata annotationMetadata = (AnnotationMetadata) ReflectUtil.getFieldValue(beanDefinition, "annotationMetadata"); - String className = annotationMetadata.getClassName(); - targetClass = ClassUtil.loadClass(className); - } - // class of bean - if (targetClass == null) { - targetClass = (Class) candidates.get(candidateBeanName); - } + Class targetClass = getTargetClass(candidates, candidateBeanName); if (moduleParser.isUnderScanPackage(targetClass.getName())) { ModuleDefinition targetModuleDefinition = moduleParser.findModuleDefinition(targetClass); if (moduleDefinition.equals(targetModuleDefinition)) { // 1、相同模块 candidateBeanNames.add(candidateBeanName); } else if (targetModuleDefinition.isExposed(targetClass)) { // 2、其他模块对外公开 - exposedCandidateBeanNames.add(candidateBeanName); + exposedCandidates.put(candidateBeanName, targetModuleDefinition); } } } @@ -137,16 +162,10 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory } // 2、其他模块对外公开 if (candidateBeanNames.isEmpty()) { - Class declaredType = descriptor.getDeclaredType(); - if (declaredType == BoundedContext.class && !exposedCandidateBeanNames.isEmpty()) { - String domainPackage = moduleDefinition.getDomainPackage(); - String boundedContextName = domainPackage + ".boundedContext"; - if (exposedCandidateBeanNames.contains(boundedContextName)) { - return boundedContextName; - } - } - if (exposedCandidateBeanNames.size() == 1) { - return exposedCandidateBeanNames.iterator().next(); + // 过滤 + invokeExposedBeanFilters(descriptor, moduleDefinition, exposedCandidates); + if (exposedCandidates.size() == 1) { + return exposedCandidates.keySet().iterator().next(); } } } @@ -155,4 +174,48 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory return beanName; } + private Class getDeclaringClass(DependencyDescriptor descriptor) { + Class declaringClass = (Class) ReflectUtil.getFieldValue(descriptor, "containingClass"); + if (declaringClass == null) { + declaringClass = (Class) ReflectUtil.getFieldValue(descriptor, "declaringClass"); + } + return declaringClass; + } + + private Class getTargetClass(Map candidates, String candidateBeanName) { + Class targetClass = null; + // class of factory bean + BeanDefinition beanDefinition = getBeanDefinition(candidateBeanName); + if (SpringClassUtils.isConfigurationBeanDefinition(beanDefinition)) { + AnnotationMetadata annotationMetadata = (AnnotationMetadata) ReflectUtil.getFieldValue(beanDefinition, "annotationMetadata"); + String className = annotationMetadata.getClassName(); + targetClass = ClassUtil.loadClass(className); + } + // class of bean + if (targetClass == null) { + Object candidate = candidates.get(candidateBeanName); + targetClass = candidate instanceof Class ? (Class) candidate : ClassUtils.getUserClass(candidate); + } + return targetClass; + } + + private void invokeExposedBeanFilters(DependencyDescriptor descriptor, ModuleDefinition moduleDefinition, Map exposedCandidates) { + if (exposedBeanFilters == null) { + synchronized (this) { + if (exposedBeanFilters == null) { + String[] beanNames = getBeanNamesForType(ExposedBeanFilter.class, true, false); + this.exposedBeanFilters = new ArrayList<>(beanNames.length); + for (String beanName : beanNames) { + ExposedBeanFilter exposedBeanFilter = getBean(beanName, ExposedBeanFilter.class); + exposedBeanFilters.add(exposedBeanFilter); + } + AnnotationAwareOrderComparator.sort(exposedBeanFilters); + } + } + } + for (ExposedBeanFilter exposedBeanFilter : exposedBeanFilters) { + exposedBeanFilter.filterExposedCandidates(descriptor, moduleDefinition, exposedCandidates); + } + } + } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java new file mode 100644 index 00000000..61c9c1e8 --- /dev/null +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.gitee.dorive.module.impl.filter; + +import com.gitee.dorive.api.entity.BoundedContext; +import com.gitee.dorive.module.api.ExposedBeanFilter; +import com.gitee.dorive.module.entity.ModuleDefinition; +import org.springframework.beans.factory.config.DependencyDescriptor; + +import java.util.Map; + +public class BoundedContextExposedBeanFilter implements ExposedBeanFilter { + + @Override + public void filterExposedCandidates(DependencyDescriptor descriptor, ModuleDefinition moduleDefinition, Map exposedCandidates) { + Class declaredType = descriptor.getDeclaredType(); + if (declaredType == BoundedContext.class && !exposedCandidates.isEmpty()) { + String domainPackage = moduleDefinition.getDomainPackage(); + String boundedContextName = domainPackage + ".boundedContext"; + ModuleDefinition existModuleDefinition = exposedCandidates.get(boundedContextName); + // 清空 + exposedCandidates.clear(); + if (existModuleDefinition != null) { + exposedCandidates.put(boundedContextName, existModuleDefinition); + } + } + } + +} diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java index 3d02f16d..8c042ff8 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java @@ -24,7 +24,6 @@ import com.gitee.dorive.module.impl.parser.DefaultModuleParser; import com.gitee.dorive.module.impl.util.BeanFactoryUtils; import lombok.Getter; import lombok.Setter; -import org.springframework.aop.support.AopUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.BeanFactory; @@ -34,6 +33,7 @@ import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotationAttributes; +import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; import java.lang.reflect.AccessibleObject; @@ -54,7 +54,7 @@ public class ModuleAutowiredBeanPostProcessor implements BeanFactoryAware, BeanP @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - Class beanType = AopUtils.getTargetClass(bean); + Class beanType = ClassUtils.getUserClass(bean); if (moduleParser.isUnderScanPackage(beanType.getName())) { try { checkAutowiredFieldModule(beanType, bean); diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/DefaultModuleParser.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/DefaultModuleParser.java index dbba0c81..9ba1e799 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/DefaultModuleParser.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/DefaultModuleParser.java @@ -19,8 +19,8 @@ package com.gitee.dorive.module.impl.parser; import com.gitee.dorive.module.api.ModuleChecker; import com.gitee.dorive.module.entity.ModuleDefinition; -import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.BeanCreationException; +import org.springframework.util.ClassUtils; public class DefaultModuleParser extends AbstractModuleParser implements ModuleChecker { @@ -30,7 +30,7 @@ public class DefaultModuleParser extends AbstractModuleParser implements ModuleC public void checkInjection(Class type, Class injectedType, Object injectedBean) { doCheckInjection(type, injectedType); if (injectedBean != null) { - Class targetClass = AopUtils.getTargetClass(injectedBean); + Class targetClass = ClassUtils.getUserClass(injectedBean); if (!injectedType.equals(targetClass)) { doCheckInjection(type, targetClass); } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanAnnotationHelper.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanAnnotationHelper.java index 7bcc3acb..9eb59552 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanAnnotationHelper.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanAnnotationHelper.java @@ -17,7 +17,6 @@ package com.gitee.dorive.module.impl.util; -import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ReflectUtil; import java.lang.reflect.Field; @@ -26,12 +25,10 @@ import java.util.Map; public class BeanAnnotationHelper { - public static final String BEAN_ANNOTATION_HELPER_CLASS_NAME = "org.springframework.context.annotation.BeanAnnotationHelper"; public static final Map BEAN_NAME_CACHE; static { - Class beanAnnotationHelperClass = ClassUtil.loadClass(BeanAnnotationHelper.BEAN_ANNOTATION_HELPER_CLASS_NAME); - Field beanNameCacheField = ReflectUtil.getField(beanAnnotationHelperClass, "beanNameCache"); + Field beanNameCacheField = ReflectUtil.getField(SpringClassUtils.BEAN_ANNOTATION_HELPER, "beanNameCache"); Object beanNameCacheFieldValue = ReflectUtil.getStaticFieldValue(beanNameCacheField); BEAN_NAME_CACHE = castValue(beanNameCacheFieldValue); } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanFactoryUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanFactoryUtils.java index cacccf91..d2b08778 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanFactoryUtils.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanFactoryUtils.java @@ -28,7 +28,7 @@ public class BeanFactoryUtils { public static Class tryGetConfigurationClass(DefaultListableBeanFactory beanFactory, Class beanType, Object bean) { // class of factory bean BeanDefinition beanDefinition = BeanFactoryUtils.getBeanDefinition(beanFactory, beanType, bean); - if (beanDefinition != null && ConfigurationUtils.isConfigurationBeanDefinition(beanDefinition)) { + if (SpringClassUtils.isConfigurationBeanDefinition(beanDefinition)) { AnnotationMetadata annotationMetadata = (AnnotationMetadata) ReflectUtil.getFieldValue(beanDefinition, "annotationMetadata"); String className = annotationMetadata.getClassName(); return ClassUtil.loadClass(className); diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java new file mode 100644 index 00000000..de813230 --- /dev/null +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.gitee.dorive.module.impl.util; + +import cn.hutool.core.util.ClassUtil; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.DependencyDescriptor; + +public class SpringClassUtils { + public static final String BEAN_ANNOTATION_HELPER_NAME = "org.springframework.context.annotation.BeanAnnotationHelper"; + public static final String CONFIGURATION_CLASS_BEAN_DEFINITION_NAME = "org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$ConfigurationClassBeanDefinition"; + public static final String STREAM_DEPENDENCY_DESCRIPTOR_NAME = "org.springframework.beans.factory.support.DefaultListableBeanFactory$StreamDependencyDescriptor"; + public static final String MULTI_ELEMENT_DESCRIPTOR_NAME = "org.springframework.beans.factory.support.DefaultListableBeanFactory$MultiElementDescriptor"; + + public static final Class BEAN_ANNOTATION_HELPER = ClassUtil.loadClass(BEAN_ANNOTATION_HELPER_NAME); + public static final Class CONFIGURATION_CLASS_BEAN_DEFINITION = ClassUtil.loadClass(CONFIGURATION_CLASS_BEAN_DEFINITION_NAME); + public static final Class STREAM_DEPENDENCY_DESCRIPTOR = ClassUtil.loadClass(STREAM_DEPENDENCY_DESCRIPTOR_NAME); + public static final Class MULTI_ELEMENT_DESCRIPTOR = ClassUtil.loadClass(MULTI_ELEMENT_DESCRIPTOR_NAME); + + public static boolean isConfigurationBeanDefinition(BeanDefinition beanDefinition) { + return beanDefinition != null && beanDefinition.getClass() == CONFIGURATION_CLASS_BEAN_DEFINITION; + } + + public static boolean isStreamDependencyDescriptor(DependencyDescriptor descriptor) { + return descriptor != null && descriptor.getClass() == STREAM_DEPENDENCY_DESCRIPTOR; + } + + public static boolean isMultiElementDescriptor(DependencyDescriptor descriptor) { + return descriptor != null && descriptor.getClass() == MULTI_ELEMENT_DESCRIPTOR; + } +} -- Gitee From 0514cec37e205e01886a86a3d119d78c73d9f1fc Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 13 Apr 2025 18:02:34 +0800 Subject: [PATCH 12/43] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E4=B8=AD=E6=B7=BB=E5=8A=A0=E6=A0=87=E7=AD=BE=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/module/entity/ModuleDefinition.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java index a407457f..009f3d72 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java @@ -43,6 +43,7 @@ public class ModuleDefinition { private String name; private String version; private String type; + private List tags; private List profiles; private List configs; private List exports; @@ -67,6 +68,7 @@ public class ModuleDefinition { String name = mainAttributes.getValue("Dorive-Module"); String version = mainAttributes.getValue("Dorive-Version"); String type = mainAttributes.getValue("Dorive-Module-Type"); + String tags = mainAttributes.getValue("Dorive-Tags"); String profiles = mainAttributes.getValue("Dorive-Profiles"); String configs = mainAttributes.getValue("Dorive-Configs"); @@ -85,6 +87,7 @@ public class ModuleDefinition { this.name = filterValue(name); this.version = filterValue(version); this.type = filterValue(type); + this.tags = filterValues(tags); this.profiles = filterValues(profiles); this.configs = filterValues(configs); -- Gitee From 1ec151ea142d96622a2600c36e71c35790a3d72a Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 13 Apr 2025 19:03:35 +0800 Subject: [PATCH 13/43] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=85=A5=E5=8F=82=E7=9A=84=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dorive/module/api/ExposedBeanFilter.java | 4 +-- .../module/entity/ModuleBeanDescriptor.java | 28 +++++++++++++++++++ .../ModuleDefaultListableBeanFactory.java | 20 +++++++------ .../BoundedContextExposedBeanFilter.java | 11 +++++--- 4 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleBeanDescriptor.java diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/api/ExposedBeanFilter.java b/dorive-module/src/main/java/com/gitee/dorive/module/api/ExposedBeanFilter.java index 13b4701f..02c6cc25 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/api/ExposedBeanFilter.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/api/ExposedBeanFilter.java @@ -17,13 +17,13 @@ package com.gitee.dorive.module.api; -import com.gitee.dorive.module.entity.ModuleDefinition; +import com.gitee.dorive.module.entity.ModuleBeanDescriptor; import org.springframework.beans.factory.config.DependencyDescriptor; import java.util.Map; public interface ExposedBeanFilter { - void filterExposedCandidates(DependencyDescriptor descriptor, ModuleDefinition moduleDefinition, Map exposedCandidates); + void filterExposedCandidates(DependencyDescriptor descriptor, ModuleBeanDescriptor beanDescriptor, Map exposedCandidates); } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleBeanDescriptor.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleBeanDescriptor.java new file mode 100644 index 00000000..e3f70da3 --- /dev/null +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleBeanDescriptor.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.gitee.dorive.module.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class ModuleBeanDescriptor { + private ModuleDefinition moduleDefinition; + private Class beanType; +} diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java index 05a3a88b..8a66c526 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java @@ -22,6 +22,7 @@ import cn.hutool.core.util.ReflectUtil; import com.gitee.dorive.module.api.BeanNameEditor; import com.gitee.dorive.module.api.ExposedBeanFilter; import com.gitee.dorive.module.api.ModuleParser; +import com.gitee.dorive.module.entity.ModuleBeanDescriptor; import com.gitee.dorive.module.entity.ModuleDefinition; import com.gitee.dorive.module.impl.environment.ModuleContextAnnotationAutowireCandidateResolver; import com.gitee.dorive.module.impl.inject.ModuleCglibSubclassingInstantiationStrategy; @@ -118,10 +119,11 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory return candidates; } else if (targetModuleDefinition.isExposed(targetClass)) { // 2、其他模块对外公开 - Map exposedCandidates = new HashMap<>(2); - exposedCandidates.put(candidateBeanName, targetModuleDefinition); + ModuleBeanDescriptor beanDescriptor = new ModuleBeanDescriptor(moduleDefinition, declaringClass); + Map exposedCandidates = new HashMap<>(2); + exposedCandidates.put(candidateBeanName, new ModuleBeanDescriptor(targetModuleDefinition, targetClass)); // 过滤 - invokeExposedBeanFilters(descriptor, moduleDefinition, exposedCandidates); + invokeExposedBeanFilters(descriptor, beanDescriptor, exposedCandidates); if (exposedCandidates.isEmpty()) { candidates.clear(); } @@ -143,7 +145,9 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(declaringClass); if (moduleDefinition != null) { List candidateBeanNames = new ArrayList<>(candidates.size()); - Map exposedCandidates = new HashMap<>(candidates.size() * 4 / 3 + 1); + ModuleBeanDescriptor beanDescriptor = new ModuleBeanDescriptor(moduleDefinition, declaringClass); + Map exposedCandidates = new HashMap<>(candidates.size() * 4 / 3 + 1); + for (String candidateBeanName : candidates.keySet()) { Class targetClass = getTargetClass(candidates, candidateBeanName); if (moduleParser.isUnderScanPackage(targetClass.getName())) { @@ -152,7 +156,7 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory candidateBeanNames.add(candidateBeanName); } else if (targetModuleDefinition.isExposed(targetClass)) { // 2、其他模块对外公开 - exposedCandidates.put(candidateBeanName, targetModuleDefinition); + exposedCandidates.put(candidateBeanName, new ModuleBeanDescriptor(targetModuleDefinition, targetClass)); } } } @@ -163,7 +167,7 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory // 2、其他模块对外公开 if (candidateBeanNames.isEmpty()) { // 过滤 - invokeExposedBeanFilters(descriptor, moduleDefinition, exposedCandidates); + invokeExposedBeanFilters(descriptor, beanDescriptor, exposedCandidates); if (exposedCandidates.size() == 1) { return exposedCandidates.keySet().iterator().next(); } @@ -199,7 +203,7 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory return targetClass; } - private void invokeExposedBeanFilters(DependencyDescriptor descriptor, ModuleDefinition moduleDefinition, Map exposedCandidates) { + private void invokeExposedBeanFilters(DependencyDescriptor descriptor, ModuleBeanDescriptor beanDescriptor, Map exposedCandidates) { if (exposedBeanFilters == null) { synchronized (this) { if (exposedBeanFilters == null) { @@ -214,7 +218,7 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory } } for (ExposedBeanFilter exposedBeanFilter : exposedBeanFilters) { - exposedBeanFilter.filterExposedCandidates(descriptor, moduleDefinition, exposedCandidates); + exposedBeanFilter.filterExposedCandidates(descriptor, beanDescriptor, exposedCandidates); } } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java index 61c9c1e8..8c968db0 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java @@ -19,6 +19,7 @@ package com.gitee.dorive.module.impl.filter; import com.gitee.dorive.api.entity.BoundedContext; import com.gitee.dorive.module.api.ExposedBeanFilter; +import com.gitee.dorive.module.entity.ModuleBeanDescriptor; import com.gitee.dorive.module.entity.ModuleDefinition; import org.springframework.beans.factory.config.DependencyDescriptor; @@ -27,16 +28,18 @@ import java.util.Map; public class BoundedContextExposedBeanFilter implements ExposedBeanFilter { @Override - public void filterExposedCandidates(DependencyDescriptor descriptor, ModuleDefinition moduleDefinition, Map exposedCandidates) { + public void filterExposedCandidates(DependencyDescriptor descriptor, ModuleBeanDescriptor beanDescriptor, Map exposedCandidates) { Class declaredType = descriptor.getDeclaredType(); if (declaredType == BoundedContext.class && !exposedCandidates.isEmpty()) { + ModuleDefinition moduleDefinition = beanDescriptor.getModuleDefinition(); String domainPackage = moduleDefinition.getDomainPackage(); String boundedContextName = domainPackage + ".boundedContext"; - ModuleDefinition existModuleDefinition = exposedCandidates.get(boundedContextName); + ModuleBeanDescriptor existModuleBeanDescriptor = exposedCandidates.get(boundedContextName); // 清空 exposedCandidates.clear(); - if (existModuleDefinition != null) { - exposedCandidates.put(boundedContextName, existModuleDefinition); + // 保留符合条件的 + if (existModuleBeanDescriptor != null) { + exposedCandidates.put(boundedContextName, existModuleBeanDescriptor); } } } -- Gitee From 84da0d079fbdc1bc65f395408c0aeec3e61a5073 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 13 Apr 2025 20:12:58 +0800 Subject: [PATCH 14/43] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=85=A5=E5=8F=82=E7=9A=84=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/entity/ModuleBeanDescriptor.java | 5 +++ .../ModuleDefaultListableBeanFactory.java | 39 ++++++++++--------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleBeanDescriptor.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleBeanDescriptor.java index e3f70da3..c8aff30a 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleBeanDescriptor.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleBeanDescriptor.java @@ -19,10 +19,15 @@ package com.gitee.dorive.module.entity; import lombok.AllArgsConstructor; import lombok.Data; +import org.springframework.lang.Nullable; @Data @AllArgsConstructor public class ModuleBeanDescriptor { private ModuleDefinition moduleDefinition; + @Nullable + private String beanName; + @Nullable + private Class factoryBeanType; private Class beanType; } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java index 8a66c526..e0ce0657 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java @@ -113,15 +113,17 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory if (moduleDefinition != null) { String candidateBeanName = candidates.keySet().iterator().next(); Class targetClass = getTargetClass(candidates, candidateBeanName); - if (moduleParser.isUnderScanPackage(targetClass.getName())) { - ModuleDefinition targetModuleDefinition = moduleParser.findModuleDefinition(targetClass); + Class targetDeclaringClass = getTargetDeclaringClass(candidateBeanName, targetClass); + + if (moduleParser.isUnderScanPackage(targetDeclaringClass.getName())) { + ModuleDefinition targetModuleDefinition = moduleParser.findModuleDefinition(targetDeclaringClass); if (moduleDefinition.equals(targetModuleDefinition)) { // 1、相同模块 return candidates; - } else if (targetModuleDefinition.isExposed(targetClass)) { // 2、其他模块对外公开 - ModuleBeanDescriptor beanDescriptor = new ModuleBeanDescriptor(moduleDefinition, declaringClass); + } else if (targetModuleDefinition.isExposed(targetDeclaringClass)) { // 2、其他模块对外公开 + ModuleBeanDescriptor beanDescriptor = new ModuleBeanDescriptor(moduleDefinition, beanName, null, declaringClass); Map exposedCandidates = new HashMap<>(2); - exposedCandidates.put(candidateBeanName, new ModuleBeanDescriptor(targetModuleDefinition, targetClass)); + exposedCandidates.put(candidateBeanName, new ModuleBeanDescriptor(targetModuleDefinition, candidateBeanName, targetDeclaringClass, targetClass)); // 过滤 invokeExposedBeanFilters(descriptor, beanDescriptor, exposedCandidates); if (exposedCandidates.isEmpty()) { @@ -145,21 +147,24 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(declaringClass); if (moduleDefinition != null) { List candidateBeanNames = new ArrayList<>(candidates.size()); - ModuleBeanDescriptor beanDescriptor = new ModuleBeanDescriptor(moduleDefinition, declaringClass); + ModuleBeanDescriptor beanDescriptor = new ModuleBeanDescriptor(moduleDefinition, null, null, declaringClass); Map exposedCandidates = new HashMap<>(candidates.size() * 4 / 3 + 1); for (String candidateBeanName : candidates.keySet()) { Class targetClass = getTargetClass(candidates, candidateBeanName); - if (moduleParser.isUnderScanPackage(targetClass.getName())) { - ModuleDefinition targetModuleDefinition = moduleParser.findModuleDefinition(targetClass); + Class targetDeclaringClass = getTargetDeclaringClass(candidateBeanName, targetClass); + + if (moduleParser.isUnderScanPackage(targetDeclaringClass.getName())) { + ModuleDefinition targetModuleDefinition = moduleParser.findModuleDefinition(targetDeclaringClass); if (moduleDefinition.equals(targetModuleDefinition)) { // 1、相同模块 candidateBeanNames.add(candidateBeanName); - } else if (targetModuleDefinition.isExposed(targetClass)) { // 2、其他模块对外公开 - exposedCandidates.put(candidateBeanName, new ModuleBeanDescriptor(targetModuleDefinition, targetClass)); + } else if (targetModuleDefinition.isExposed(targetDeclaringClass)) { // 2、其他模块对外公开 + exposedCandidates.put(candidateBeanName, new ModuleBeanDescriptor(targetModuleDefinition, candidateBeanName, targetDeclaringClass, targetClass)); } } } + // 1、相同模块 if (candidateBeanNames.size() == 1) { return candidateBeanNames.get(0); @@ -187,18 +192,16 @@ public class ModuleDefaultListableBeanFactory extends DefaultListableBeanFactory } private Class getTargetClass(Map candidates, String candidateBeanName) { - Class targetClass = null; - // class of factory bean + Object candidate = candidates.get(candidateBeanName); + return candidate instanceof Class ? (Class) candidate : ClassUtils.getUserClass(candidate); + } + + private Class getTargetDeclaringClass(String candidateBeanName, Class targetClass) { BeanDefinition beanDefinition = getBeanDefinition(candidateBeanName); if (SpringClassUtils.isConfigurationBeanDefinition(beanDefinition)) { AnnotationMetadata annotationMetadata = (AnnotationMetadata) ReflectUtil.getFieldValue(beanDefinition, "annotationMetadata"); String className = annotationMetadata.getClassName(); - targetClass = ClassUtil.loadClass(className); - } - // class of bean - if (targetClass == null) { - Object candidate = candidates.get(candidateBeanName); - targetClass = candidate instanceof Class ? (Class) candidate : ClassUtils.getUserClass(candidate); + return ClassUtil.loadClass(className); } return targetClass; } -- Gitee From d5946149414732a153a297896388852094bbb519 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 13 Apr 2025 20:55:28 +0800 Subject: [PATCH 15/43] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/module/entity/ModuleDefinition.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java index 009f3d72..4e5e59f1 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java @@ -197,4 +197,15 @@ public class ModuleDefinition { } return 2; } + + @Override + public String toString() { + List paths = new ArrayList<>(5); + paths.add(String.valueOf(project)); + paths.add(String.valueOf(domain)); + paths.add(String.valueOf(subdomain)); + paths.add(String.valueOf(name)); + paths.add(String.valueOf(version)); + return StrUtil.join(".", paths); + } } -- Gitee From c15e93e1c1cabf15592ef66045aff12bcfa44809 Mon Sep 17 00:00:00 2001 From: chenT <609580885@qq.com> Date: Tue, 15 Apr 2025 17:49:45 +0800 Subject: [PATCH 16/43] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleContextAnnotationAutowireCandidateResolver.java | 3 ++- .../impl/environment/ModuleEnvironmentPostProcessor.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleContextAnnotationAutowireCandidateResolver.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleContextAnnotationAutowireCandidateResolver.java index 2763bce6..f2817ae2 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleContextAnnotationAutowireCandidateResolver.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleContextAnnotationAutowireCandidateResolver.java @@ -42,10 +42,11 @@ public class ModuleContextAnnotationAutowireCandidateResolver extends ContextAnn ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(declaringClass); if (moduleDefinition != null) { String name = moduleDefinition.getName(); + String version = moduleDefinition.getVersion(); String strValue = (String) value; if (strValue.startsWith("${") && strValue.endsWith("}")) { strValue = StrUtil.removePrefix(strValue, "${"); - return "${" + name + "." + strValue; + return "${" + name + "." + version + "." + strValue; } } } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleEnvironmentPostProcessor.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleEnvironmentPostProcessor.java index 465c93c8..e3e0efa3 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleEnvironmentPostProcessor.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleEnvironmentPostProcessor.java @@ -60,8 +60,9 @@ public class ModuleEnvironmentPostProcessor implements EnvironmentPostProcessor, Map map = (Map) source; if (!map.isEmpty()) { String moduleName = moduleDefinition.getName(); + String moduleVersion = moduleDefinition.getVersion(); Map newMap = new LinkedHashMap<>(); - map.forEach((key, value) -> newMap.put(moduleName + "." + key, value)); + map.forEach((key, value) -> newMap.put(moduleName + "." + moduleVersion + "." + key, value)); PropertySource newPropertySource = new OriginTrackedMapPropertySource(name, Collections.unmodifiableMap(newMap)); propertySources.replace(name, newPropertySource); } -- Gitee From ac5f120cadf1e78a58952c8c329cf3e4b7af4b7c Mon Sep 17 00:00:00 2001 From: chenT <609580885@qq.com> Date: Wed, 16 Apr 2025 16:40:32 +0800 Subject: [PATCH 17/43] =?UTF-8?q?web=E6=A8=A1=E5=9D=97=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=9C=8D=E5=8A=A1=EF=BC=8C=E5=8F=AF=E4=BE=9B?= =?UTF-8?q?=E7=BB=A7=E6=89=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/dorive/api/util/ReflectUtils.java | 2 +- .../dorive/core/config/RepositoryContext.java | 2 +- .../repository/AbstractContextRepository.java | 2 +- .../dorive/web/impl/service/BaseService.java | 77 +++++++++++++++++++ 4 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java b/dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java index 127e52fe..92c020ce 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java @@ -50,7 +50,7 @@ public class ReflectUtils { return fields; } - public static Class getFirstArgumentType(Class type) { + public static Class getFirstTypeArgument(Class type) { Type genericSuperclass = type.getGenericSuperclass(); ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0]; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java b/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java index ac5ededd..88cc1485 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java @@ -47,7 +47,7 @@ public class RepositoryContext implements BeanFactoryPostProcessor { if (StringUtils.isNotBlank(beanClassName) && !beanClassName.startsWith("org.springframework.")) { Class beanClass = ClassUtil.loadClass(beanClassName); if (AbstractContextRepository.class.isAssignableFrom(beanClass)) { - Class entityClass = ReflectUtils.getFirstArgumentType(beanClass); + Class entityClass = ReflectUtils.getFirstTypeArgument(beanClass); ENTITY_REPOSITORY_MAP.put(entityClass, beanClass); } } diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java index 4ff43d6e..2a9edaef 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java @@ -92,7 +92,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor @Override public void afterPropertiesSet() throws Exception { Class repositoryClass = this.getClass(); - Class entityClass = ReflectUtils.getFirstArgumentType(repositoryClass); + Class entityClass = ReflectUtils.getFirstTypeArgument(repositoryClass); prepareRepositoryDef(repositoryClass, entityClass); Assert.notNull(repositoryDef, "The @Repository does not exist! type: {}", repositoryClass.getName()); diff --git a/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java b/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java new file mode 100644 index 00000000..1ff1c5d5 --- /dev/null +++ b/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java @@ -0,0 +1,77 @@ +package com.gitee.dorive.web.impl.service; + +import com.gitee.dorive.api.util.ReflectUtils; +import com.gitee.dorive.core.api.context.Options; +import com.gitee.dorive.core.config.RepositoryContext; +import com.gitee.dorive.core.entity.executor.Page; +import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.web.entity.ResObject; +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Getter +@Setter +public class BaseService implements ApplicationContextAware, InitializingBean { + + private ApplicationContext applicationContext; + private AbstractQueryRepository repository; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + @Override + @SuppressWarnings("unchecked") + public void afterPropertiesSet() { + Class firstArgumentType = ReflectUtils.getFirstTypeArgument(getClass()); + Class repositoryClass = RepositoryContext.findRepositoryClass(firstArgumentType); + this.repository = (AbstractQueryRepository) applicationContext.getBean(repositoryClass); + } + + @Transactional(rollbackFor = Exception.class) + public ResObject add(Options options, E entity) { + int count = repository.insert(options, entity); + return count > 0 ? ResObject.success() : ResObject.fail(); + } + + @Transactional(rollbackFor = Exception.class) + public ResObject addBatch(Options options, List entities) { + int count = repository.insertList(options, entities); + return count > 0 ? ResObject.success() : ResObject.fail(); + } + + public List list(Options options, Q query) { + return repository.selectByQuery(options, query); + } + + public Page page(Options options, Q query) { + return repository.selectPageByQuery(options, query); + } + + @Transactional(rollbackFor = Exception.class) + public ResObject edit(Options options, E entity) { + int count = repository.update(options, entity); + return count > 0 ? ResObject.success() : ResObject.fail(); + } + + @Transactional(rollbackFor = Exception.class) + public ResObject editBatch(Options options, List entities) { + int count = repository.updateList(options, entities); + return count > 0 ? ResObject.success() : ResObject.fail(); + } + + @Transactional(rollbackFor = Exception.class) + public ResObject delete(Options options, Integer id) { + int count = repository.deleteByPrimaryKey(options, id); + return count > 0 ? ResObject.success() : ResObject.fail(); + } + +} -- Gitee From 98ba53f0821396dda8e949fb7f04cc1639f0803c Mon Sep 17 00:00:00 2001 From: chenT <609580885@qq.com> Date: Wed, 16 Apr 2025 16:50:19 +0800 Subject: [PATCH 18/43] =?UTF-8?q?web=E6=A8=A1=E5=9D=97=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=9C=8D=E5=8A=A1=EF=BC=8C=E5=8F=AF=E4=BE=9B?= =?UTF-8?q?=E7=BB=A7=E6=89=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/web/impl/service/BaseService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java b/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java index 1ff1c5d5..6f1f3f5a 100644 --- a/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java +++ b/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java @@ -31,8 +31,8 @@ public class BaseService implements ApplicationContextAware, InitializingB @Override @SuppressWarnings("unchecked") public void afterPropertiesSet() { - Class firstArgumentType = ReflectUtils.getFirstTypeArgument(getClass()); - Class repositoryClass = RepositoryContext.findRepositoryClass(firstArgumentType); + Class entityClass = ReflectUtils.getFirstTypeArgument(getClass()); + Class repositoryClass = RepositoryContext.findRepositoryClass(entityClass); this.repository = (AbstractQueryRepository) applicationContext.getBean(repositoryClass); } -- Gitee From 1d5df0716fb9248543fd9dc77dc78dde5b187d9b Mon Sep 17 00:00:00 2001 From: chenT <609580885@qq.com> Date: Wed, 16 Apr 2025 17:45:49 +0800 Subject: [PATCH 19/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=93=E5=82=A8?= =?UTF-8?q?=E5=8C=85=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/dorive/core/config/RepositoryContext.java | 2 +- .../gitee/dorive/core/impl/context/AdaptiveMatcher.java | 2 +- .../com/gitee/dorive/core/impl/endpoint/BindEndpoint.java | 2 +- .../gitee/dorive/core/impl/executor/ContextExecutor.java | 4 ++-- .../dorive/core/impl/handler/AdaptiveEntityHandler.java | 2 +- .../dorive/core/impl/handler/BatchEntityHandler.java | 4 ++-- .../core/impl/handler/ContextMatchEntityHandler.java | 2 +- .../dorive/core/impl/handler/DelegatedEntityHandler.java | 2 +- .../core/impl/handler/ValueFilterEntityHandler.java | 2 +- .../dorive/core/impl/handler/eo/BatchEntityOpHandler.java | 4 ++-- .../core/impl/handler/eo/DelegatedEntityOpHandler.java | 2 +- .../core/impl/handler/joiner/AbstractEntityJoiner.java | 2 +- .../core/impl/handler/joiner/MultiEntityHandler.java | 2 +- .../core/impl/handler/joiner/SingleEntityHandler.java | 2 +- .../core/impl/handler/joiner/UnionEntityHandler.java | 2 +- .../{ => impl}/repository/AbstractContextRepository.java | 2 +- .../{ => impl}/repository/AbstractGenericRepository.java | 2 +- .../{ => impl}/repository/AbstractProxyRepository.java | 2 +- .../core/{ => impl}/repository/AbstractRepository.java | 2 +- .../core/{ => impl}/repository/CommonRepository.java | 2 +- .../core/{ => impl}/repository/DefaultRepository.java | 2 +- .../gitee/dorive/core/impl/resolver/BinderResolver.java | 4 ++-- .../core/impl/resolver/DerivedRepositoryResolver.java | 2 +- .../dorive/event/repository/AbstractEventRepository.java | 4 +++- .../com/gitee/dorive/query/entity/MergedRepository.java | 4 ++-- .../dorive/query/impl/handler/StepwiseQueryHandler.java | 2 +- .../query/impl/resolver/MergedRepositoryResolver.java | 8 ++++---- .../dorive/query/impl/resolver/QueryTypeResolver.java | 2 +- .../src/main/java/com/gitee/dorive/ref/impl/RefImpl.java | 2 +- .../main/java/com/gitee/dorive/ref/impl/RefObjImpl.java | 2 +- .../gitee/dorive/sql/impl/segment/SegmentResolver.java | 2 +- .../dorive/sql/impl/segment/SelectSegmentBuilder.java | 2 +- 32 files changed, 42 insertions(+), 40 deletions(-) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/repository/AbstractContextRepository.java (99%) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/repository/AbstractGenericRepository.java (98%) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/repository/AbstractProxyRepository.java (98%) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/repository/AbstractRepository.java (99%) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/repository/CommonRepository.java (99%) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/repository/DefaultRepository.java (95%) diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java b/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java index 88cc1485..039caec7 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java @@ -20,7 +20,7 @@ package com.gitee.dorive.core.config; import cn.hutool.core.util.ClassUtil; import com.gitee.dorive.api.util.ReflectUtils; import com.gitee.dorive.core.api.common.RepositoryPostProcessor; -import com.gitee.dorive.core.repository.AbstractContextRepository; +import com.gitee.dorive.core.impl.repository.AbstractContextRepository; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanDefinition; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/AdaptiveMatcher.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/AdaptiveMatcher.java index 1b3ceab8..0d8cb89e 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/AdaptiveMatcher.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/AdaptiveMatcher.java @@ -21,7 +21,7 @@ import com.gitee.dorive.core.api.context.Matcher; import com.gitee.dorive.core.api.context.Options; import com.gitee.dorive.core.api.context.Selector; import com.gitee.dorive.core.entity.enums.MatcherType; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.Getter; import lombok.Setter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/endpoint/BindEndpoint.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/endpoint/BindEndpoint.java index 8b2f7314..51cf0074 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/endpoint/BindEndpoint.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/endpoint/BindEndpoint.java @@ -18,7 +18,7 @@ package com.gitee.dorive.core.impl.endpoint; import com.gitee.dorive.api.entity.core.FieldDefinition; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.Getter; import lombok.Setter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ContextExecutor.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ContextExecutor.java index 1f41721a..fbea3dd2 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ContextExecutor.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/executor/ContextExecutor.java @@ -25,8 +25,8 @@ import com.gitee.dorive.core.entity.executor.Result; import com.gitee.dorive.core.entity.operation.EntityOp; import com.gitee.dorive.core.entity.operation.Operation; import com.gitee.dorive.core.entity.operation.cop.Query; -import com.gitee.dorive.core.repository.AbstractContextRepository; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.AbstractContextRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.Getter; import lombok.Setter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java index 5c4b8783..bc9e363b 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java @@ -23,7 +23,7 @@ import com.gitee.dorive.core.entity.enums.JoinType; import com.gitee.dorive.core.impl.handler.joiner.MultiEntityHandler; import com.gitee.dorive.core.impl.handler.joiner.SingleEntityHandler; import com.gitee.dorive.core.impl.handler.joiner.UnionEntityHandler; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java index a0499b3b..78973cc9 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/BatchEntityHandler.java @@ -19,8 +19,8 @@ package com.gitee.dorive.core.impl.handler; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.executor.EntityHandler; -import com.gitee.dorive.core.repository.AbstractContextRepository; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.AbstractContextRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.Data; import java.util.ArrayList; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/ContextMatchEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/ContextMatchEntityHandler.java index 69183073..e1b4d6ca 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/ContextMatchEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/ContextMatchEntityHandler.java @@ -19,7 +19,7 @@ package com.gitee.dorive.core.impl.handler; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.executor.EntityHandler; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/DelegatedEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/DelegatedEntityHandler.java index 15cecd5d..9e57373a 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/DelegatedEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/DelegatedEntityHandler.java @@ -19,7 +19,7 @@ package com.gitee.dorive.core.impl.handler; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.executor.EntityHandler; -import com.gitee.dorive.core.repository.AbstractContextRepository; +import com.gitee.dorive.core.impl.repository.AbstractContextRepository; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/ValueFilterEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/ValueFilterEntityHandler.java index 66d8df00..08236268 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/ValueFilterEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/ValueFilterEntityHandler.java @@ -21,7 +21,7 @@ import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.core.impl.binder.ValueRouteBinder; import com.gitee.dorive.core.impl.resolver.BinderResolver; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/BatchEntityOpHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/BatchEntityOpHandler.java index f611f9a5..d35dae7b 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/BatchEntityOpHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/BatchEntityOpHandler.java @@ -27,8 +27,8 @@ import com.gitee.dorive.core.entity.operation.eop.Insert; import com.gitee.dorive.core.entity.operation.eop.InsertOrUpdate; import com.gitee.dorive.core.entity.operation.eop.Update; import com.gitee.dorive.core.impl.factory.OperationFactory; -import com.gitee.dorive.core.repository.AbstractContextRepository; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.AbstractContextRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import com.gitee.dorive.core.util.CollectionUtils; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/DelegatedEntityOpHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/DelegatedEntityOpHandler.java index 3ce12301..96f920f5 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/DelegatedEntityOpHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/DelegatedEntityOpHandler.java @@ -25,7 +25,7 @@ import com.gitee.dorive.core.entity.operation.eop.Insert; import com.gitee.dorive.core.entity.operation.eop.InsertOrUpdate; import com.gitee.dorive.core.entity.operation.eop.Update; import com.gitee.dorive.core.impl.factory.OperationFactory; -import com.gitee.dorive.core.repository.AbstractContextRepository; +import com.gitee.dorive.core.impl.repository.AbstractContextRepository; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/AbstractEntityJoiner.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/AbstractEntityJoiner.java index 0d5d6622..871b32de 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/AbstractEntityJoiner.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/AbstractEntityJoiner.java @@ -26,7 +26,7 @@ import com.gitee.dorive.core.entity.operation.cop.Query; import com.gitee.dorive.core.impl.binder.WeakBinder; import com.gitee.dorive.core.impl.factory.OperationFactory; import com.gitee.dorive.core.impl.resolver.BinderResolver; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.Getter; import lombok.Setter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/MultiEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/MultiEntityHandler.java index 8871eafc..7f43d099 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/MultiEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/MultiEntityHandler.java @@ -23,7 +23,7 @@ import com.gitee.dorive.core.entity.executor.InnerExample; import com.gitee.dorive.core.entity.executor.Result; import com.gitee.dorive.core.impl.binder.AbstractBinder; import com.gitee.dorive.core.impl.binder.StrongBinder; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import com.gitee.dorive.core.util.MultiInBuilder; import lombok.Getter; import lombok.Setter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/SingleEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/SingleEntityHandler.java index e6a80c8f..4a1a6e6b 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/SingleEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/SingleEntityHandler.java @@ -22,7 +22,7 @@ import com.gitee.dorive.core.entity.executor.Example; import com.gitee.dorive.core.entity.executor.InnerExample; import com.gitee.dorive.core.entity.executor.Result; import com.gitee.dorive.core.impl.binder.StrongBinder; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.Getter; import lombok.Setter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/UnionEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/UnionEntityHandler.java index 3f3167e0..34fd525c 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/UnionEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/UnionEntityHandler.java @@ -24,7 +24,7 @@ import com.gitee.dorive.core.entity.executor.InnerExample; import com.gitee.dorive.core.entity.executor.Result; import com.gitee.dorive.core.entity.executor.UnionExample; import com.gitee.dorive.core.impl.binder.StrongBinder; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.Getter; import lombok.Setter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java similarity index 99% rename from dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java index 2a9edaef..34c22640 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.repository; +package com.gitee.dorive.core.impl.repository; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractGenericRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractGenericRepository.java similarity index 98% rename from dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractGenericRepository.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractGenericRepository.java index ece29829..4e579aad 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractGenericRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractGenericRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.repository; +package com.gitee.dorive.core.impl.repository; import cn.hutool.core.lang.Assert; import com.gitee.dorive.core.api.context.Context; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractProxyRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractProxyRepository.java similarity index 98% rename from dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractProxyRepository.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractProxyRepository.java index 1bdf7abb..a1c8dd99 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractProxyRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractProxyRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.repository; +package com.gitee.dorive.core.impl.repository; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.context.Options; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractRepository.java similarity index 99% rename from dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractRepository.java index 75e21363..ff105e68 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/AbstractRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.repository; +package com.gitee.dorive.core.impl.repository; import cn.hutool.core.lang.Assert; import com.gitee.dorive.api.entity.core.EntityElement; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/CommonRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/CommonRepository.java similarity index 99% rename from dorive-core/src/main/java/com/gitee/dorive/core/repository/CommonRepository.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/CommonRepository.java index 0b2c8462..d8bdcd18 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/CommonRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/CommonRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.repository; +package com.gitee.dorive.core.impl.repository; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.context.Matcher; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/repository/DefaultRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/DefaultRepository.java similarity index 95% rename from dorive-core/src/main/java/com/gitee/dorive/core/repository/DefaultRepository.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/DefaultRepository.java index 4c3554bd..b95091ad 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/repository/DefaultRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/DefaultRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.repository; +package com.gitee.dorive.core.impl.repository; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java index aef5f22a..ad0b9bdc 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/BinderResolver.java @@ -36,8 +36,8 @@ import com.gitee.dorive.core.impl.binder.*; import com.gitee.dorive.core.impl.endpoint.BindEndpoint; import com.gitee.dorive.core.impl.endpoint.FieldEndpoint; import com.gitee.dorive.core.impl.processor.SpELProcessor; -import com.gitee.dorive.core.repository.AbstractContextRepository; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.AbstractContextRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import lombok.Data; import org.apache.commons.lang3.StringUtils; import org.springframework.context.ApplicationContext; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedRepositoryResolver.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedRepositoryResolver.java index e4d5c214..1f52319b 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedRepositoryResolver.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/resolver/DerivedRepositoryResolver.java @@ -21,7 +21,7 @@ import com.gitee.dorive.api.entity.core.def.RepositoryDef; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.core.api.executor.EntityOpHandler; import com.gitee.dorive.core.api.executor.Executor; -import com.gitee.dorive.core.repository.AbstractContextRepository; +import com.gitee.dorive.core.impl.repository.AbstractContextRepository; import lombok.Data; import org.springframework.context.ApplicationContext; diff --git a/dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java b/dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java index 58205ace..5f6897f1 100644 --- a/dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java +++ b/dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java @@ -28,7 +28,9 @@ import com.gitee.dorive.core.entity.operation.eop.Insert; import com.gitee.dorive.core.entity.operation.eop.InsertOrUpdate; import com.gitee.dorive.core.entity.operation.eop.Update; import com.gitee.dorive.core.impl.factory.OperationFactory; -import com.gitee.dorive.core.repository.*; +import com.gitee.dorive.core.impl.repository.AbstractGenericRepository; +import com.gitee.dorive.core.impl.repository.AbstractRepository; +import com.gitee.dorive.core.impl.repository.DefaultRepository; import com.gitee.dorive.event.entity.BaseEvent; import com.gitee.dorive.event.entity.ExecutorEvent; import com.gitee.dorive.event.entity.RepositoryEvent; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/entity/MergedRepository.java b/dorive-query/src/main/java/com/gitee/dorive/query/entity/MergedRepository.java index 02dabfc6..68f6056e 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/entity/MergedRepository.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/entity/MergedRepository.java @@ -19,8 +19,8 @@ package com.gitee.dorive.query.entity; import com.gitee.dorive.core.impl.binder.StrongBinder; import com.gitee.dorive.core.impl.binder.ValueRouteBinder; -import com.gitee.dorive.core.repository.CommonRepository; -import com.gitee.dorive.core.repository.DefaultRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.DefaultRepository; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/StepwiseQueryHandler.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/StepwiseQueryHandler.java index 8b0d0156..33e73672 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/StepwiseQueryHandler.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/StepwiseQueryHandler.java @@ -23,7 +23,7 @@ import com.gitee.dorive.core.impl.binder.AbstractBinder; import com.gitee.dorive.core.impl.binder.StrongBinder; import com.gitee.dorive.core.impl.binder.ValueRouteBinder; import com.gitee.dorive.core.impl.resolver.BinderResolver; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import com.gitee.dorive.core.util.MultiInBuilder; import com.gitee.dorive.query.entity.MergedRepository; import com.gitee.dorive.query.entity.QueryContext; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/MergedRepositoryResolver.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/MergedRepositoryResolver.java index 09cd01bb..f43b50dc 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/MergedRepositoryResolver.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/MergedRepositoryResolver.java @@ -20,10 +20,10 @@ package com.gitee.dorive.query.impl.resolver; import com.gitee.dorive.core.impl.binder.StrongBinder; import com.gitee.dorive.core.impl.binder.ValueRouteBinder; import com.gitee.dorive.core.impl.resolver.BinderResolver; -import com.gitee.dorive.core.repository.AbstractContextRepository; -import com.gitee.dorive.core.repository.AbstractRepository; -import com.gitee.dorive.core.repository.CommonRepository; -import com.gitee.dorive.core.repository.DefaultRepository; +import com.gitee.dorive.core.impl.repository.AbstractContextRepository; +import com.gitee.dorive.core.impl.repository.AbstractRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.DefaultRepository; import com.gitee.dorive.query.entity.MergedRepository; import com.gitee.dorive.query.repository.AbstractQueryRepository; import lombok.Data; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryTypeResolver.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryTypeResolver.java index 29717702..93bdbbae 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryTypeResolver.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryTypeResolver.java @@ -23,7 +23,7 @@ import com.gitee.dorive.api.entity.query.QueryDefinition; import com.gitee.dorive.api.entity.query.QueryFieldDefinition; import com.gitee.dorive.api.entity.query.def.QueryFieldDef; import com.gitee.dorive.api.impl.query.QueryDefinitionResolver; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import com.gitee.dorive.query.entity.MergedRepository; import com.gitee.dorive.query.entity.QueryConfig; import com.gitee.dorive.query.repository.AbstractQueryRepository; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java index 4decd685..4dc5419e 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java @@ -20,7 +20,7 @@ package com.gitee.dorive.ref.impl; import com.gitee.dorive.core.api.context.Options; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.core.entity.executor.Page; -import com.gitee.dorive.core.repository.AbstractProxyRepository; +import com.gitee.dorive.core.impl.repository.AbstractProxyRepository; import com.gitee.dorive.ref.api.Ref; import com.gitee.dorive.ref.api.RefObj; import com.gitee.dorive.ref.repository.AbstractRefRepository; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java index 1d7a4c73..35ed9920 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java @@ -21,7 +21,7 @@ import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.context.Options; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.core.entity.context.DefaultContext; -import com.gitee.dorive.core.repository.AbstractRepository; +import com.gitee.dorive.core.impl.repository.AbstractRepository; import com.gitee.dorive.ref.api.RefObj; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java index 1f86e7b9..8a7690d7 100644 --- a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java +++ b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java @@ -26,7 +26,7 @@ import com.gitee.dorive.core.impl.binder.StrongBinder; import com.gitee.dorive.core.impl.binder.ValueFilterBinder; import com.gitee.dorive.core.impl.binder.ValueRouteBinder; import com.gitee.dorive.core.impl.resolver.BinderResolver; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import com.gitee.dorive.core.util.CriterionUtils; import com.gitee.dorive.query.entity.MergedRepository; import com.gitee.dorive.query.entity.QueryContext; diff --git a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SelectSegmentBuilder.java b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SelectSegmentBuilder.java index c7b9b7eb..9c1dc555 100644 --- a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SelectSegmentBuilder.java +++ b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SelectSegmentBuilder.java @@ -18,7 +18,7 @@ package com.gitee.dorive.sql.impl.segment; import com.gitee.dorive.core.api.context.Selector; -import com.gitee.dorive.core.repository.CommonRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; import com.gitee.dorive.query.entity.MergedRepository; import com.gitee.dorive.query.entity.QueryContext; import com.gitee.dorive.query.entity.QueryUnit; -- Gitee From 8d08014af1228d5e08f90dfac9819e87ec168369 Mon Sep 17 00:00:00 2001 From: chenT <609580885@qq.com> Date: Wed, 16 Apr 2025 17:49:16 +0800 Subject: [PATCH 20/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=93=E5=82=A8?= =?UTF-8?q?=E5=8C=85=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/{ => impl}/repository/AbstractEventRepository.java | 2 +- .../main/java/com/gitee/dorive/query/entity/QueryConfig.java | 2 +- .../gitee/dorive/query/impl/handler/ConfigQueryHandler.java | 2 +- .../dorive/query/impl/handler/ContextMatchQueryHandler.java | 2 +- .../query/{ => impl}/repository/AbstractQueryRepository.java | 4 ++-- .../dorive/query/impl/resolver/MergedRepositoryResolver.java | 2 +- .../gitee/dorive/query/impl/resolver/QueryTypeResolver.java | 2 +- .../gitee/dorive/ref/repository/AbstractInnerRepository.java | 2 +- .../gitee/dorive/sql/impl/handler/SqlBuildQueryHandler.java | 2 +- .../gitee/dorive/sql/impl/handler/SqlCustomQueryHandler.java | 2 +- .../gitee/dorive/sql/impl/handler/SqlExecuteQueryHandler.java | 2 +- .../com/gitee/dorive/sql/impl/querier/SqlCountQuerier.java | 2 +- .../com/gitee/dorive/sql/impl/segment/SegmentResolver.java | 2 +- .../java/com/gitee/dorive/web/impl/service/BaseService.java | 2 +- 14 files changed, 15 insertions(+), 15 deletions(-) rename dorive-event/src/main/java/com/gitee/dorive/event/{ => impl}/repository/AbstractEventRepository.java (98%) rename dorive-query/src/main/java/com/gitee/dorive/query/{ => impl}/repository/AbstractQueryRepository.java (97%) diff --git a/dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java b/dorive-event/src/main/java/com/gitee/dorive/event/impl/repository/AbstractEventRepository.java similarity index 98% rename from dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java rename to dorive-event/src/main/java/com/gitee/dorive/event/impl/repository/AbstractEventRepository.java index 5f6897f1..f93d374f 100644 --- a/dorive-event/src/main/java/com/gitee/dorive/event/repository/AbstractEventRepository.java +++ b/dorive-event/src/main/java/com/gitee/dorive/event/impl/repository/AbstractEventRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.event.repository; +package com.gitee.dorive.event.impl.repository; import cn.hutool.core.util.ArrayUtil; import com.gitee.dorive.api.entity.core.EntityElement; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/entity/QueryConfig.java b/dorive-query/src/main/java/com/gitee/dorive/query/entity/QueryConfig.java index 29aa2276..4eb22cd1 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/entity/QueryConfig.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/entity/QueryConfig.java @@ -19,7 +19,7 @@ package com.gitee.dorive.query.entity; import com.gitee.dorive.api.entity.core.EntityElement; import com.gitee.dorive.query.impl.resolver.QueryExampleResolver; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import lombok.Data; import java.util.List; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/ConfigQueryHandler.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/ConfigQueryHandler.java index 40b34a59..b30154b1 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/ConfigQueryHandler.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/ConfigQueryHandler.java @@ -22,7 +22,7 @@ import com.gitee.dorive.query.api.QueryHandler; import com.gitee.dorive.query.entity.QueryConfig; import com.gitee.dorive.query.entity.QueryContext; import com.gitee.dorive.query.impl.resolver.QueryTypeResolver; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import lombok.AllArgsConstructor; import java.util.Map; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/ContextMatchQueryHandler.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/ContextMatchQueryHandler.java index 98b1ab2b..d3e6df66 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/ContextMatchQueryHandler.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/ContextMatchQueryHandler.java @@ -20,7 +20,7 @@ package com.gitee.dorive.query.impl.handler; import com.gitee.dorive.core.api.context.Matcher; import com.gitee.dorive.query.api.QueryHandler; import com.gitee.dorive.query.entity.QueryContext; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import lombok.AllArgsConstructor; @AllArgsConstructor diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/repository/AbstractQueryRepository.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/repository/AbstractQueryRepository.java similarity index 97% rename from dorive-query/src/main/java/com/gitee/dorive/query/repository/AbstractQueryRepository.java rename to dorive-query/src/main/java/com/gitee/dorive/query/impl/repository/AbstractQueryRepository.java index d92456ee..86aa8a74 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/repository/AbstractQueryRepository.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/repository/AbstractQueryRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.query.repository; +package com.gitee.dorive.query.impl.repository; import com.gitee.dorive.api.entity.core.def.RepositoryDef; import com.gitee.dorive.core.api.context.Context; @@ -23,7 +23,7 @@ import com.gitee.dorive.core.api.context.Options; import com.gitee.dorive.core.entity.executor.Example; import com.gitee.dorive.core.entity.executor.Page; import com.gitee.dorive.core.entity.executor.Result; -import com.gitee.dorive.event.repository.AbstractEventRepository; +import com.gitee.dorive.event.impl.repository.AbstractEventRepository; import com.gitee.dorive.query.api.QueryHandler; import com.gitee.dorive.query.api.QueryRepository; import com.gitee.dorive.query.entity.QueryContext; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/MergedRepositoryResolver.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/MergedRepositoryResolver.java index f43b50dc..33ded1f8 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/MergedRepositoryResolver.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/MergedRepositoryResolver.java @@ -25,7 +25,7 @@ import com.gitee.dorive.core.impl.repository.AbstractRepository; import com.gitee.dorive.core.impl.repository.CommonRepository; import com.gitee.dorive.core.impl.repository.DefaultRepository; import com.gitee.dorive.query.entity.MergedRepository; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import lombok.Data; import org.apache.commons.lang3.StringUtils; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryTypeResolver.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryTypeResolver.java index 93bdbbae..1b60634c 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryTypeResolver.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryTypeResolver.java @@ -26,7 +26,7 @@ import com.gitee.dorive.api.impl.query.QueryDefinitionResolver; import com.gitee.dorive.core.impl.repository.CommonRepository; import com.gitee.dorive.query.entity.MergedRepository; import com.gitee.dorive.query.entity.QueryConfig; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import lombok.Data; import java.util.*; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractInnerRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractInnerRepository.java index 48babf71..7c659774 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractInnerRepository.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractInnerRepository.java @@ -24,7 +24,7 @@ import com.gitee.dorive.core.entity.executor.Example; import com.gitee.dorive.core.entity.executor.InnerExample; import com.gitee.dorive.core.entity.executor.Page; import com.gitee.dorive.core.util.ExampleUtils; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import java.util.List; diff --git a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlBuildQueryHandler.java b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlBuildQueryHandler.java index fe7e3b96..168a01f0 100644 --- a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlBuildQueryHandler.java +++ b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlBuildQueryHandler.java @@ -25,7 +25,7 @@ import com.gitee.dorive.core.entity.executor.Result; import com.gitee.dorive.query.entity.QueryContext; import com.gitee.dorive.query.entity.QueryUnit; import com.gitee.dorive.query.impl.handler.AbstractQueryUnitQueryHandler; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import com.gitee.dorive.sql.impl.segment.SegmentResolver; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlCustomQueryHandler.java b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlCustomQueryHandler.java index 7f705bea..046a3546 100644 --- a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlCustomQueryHandler.java +++ b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlCustomQueryHandler.java @@ -24,7 +24,7 @@ import com.gitee.dorive.core.entity.common.EntityStoreInfo; import com.gitee.dorive.core.entity.executor.*; import com.gitee.dorive.query.entity.QueryContext; import com.gitee.dorive.query.entity.QueryUnit; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import lombok.Getter; import lombok.Setter; diff --git a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlExecuteQueryHandler.java b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlExecuteQueryHandler.java index 34b62d47..d1f8be6c 100644 --- a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlExecuteQueryHandler.java +++ b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/handler/SqlExecuteQueryHandler.java @@ -25,7 +25,7 @@ import com.gitee.dorive.core.entity.executor.Result; import com.gitee.dorive.query.entity.QueryContext; import com.gitee.dorive.query.entity.QueryUnit; import com.gitee.dorive.query.entity.enums.ResultType; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import com.gitee.dorive.sql.api.SqlRunner; import com.gitee.dorive.sql.entity.segment.ArgSegment; import com.gitee.dorive.sql.entity.segment.SelectSegment; diff --git a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/querier/SqlCountQuerier.java b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/querier/SqlCountQuerier.java index eb9ed452..194011af 100644 --- a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/querier/SqlCountQuerier.java +++ b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/querier/SqlCountQuerier.java @@ -25,7 +25,7 @@ import com.gitee.dorive.query.entity.QueryContext; import com.gitee.dorive.query.entity.QueryUnit; import com.gitee.dorive.query.entity.enums.QueryMethod; import com.gitee.dorive.query.entity.enums.ResultType; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import com.gitee.dorive.sql.api.CountQuerier; import com.gitee.dorive.sql.api.SqlRunner; import com.gitee.dorive.sql.entity.common.CountQuery; diff --git a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java index 8a7690d7..8d321a8f 100644 --- a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java +++ b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java @@ -32,7 +32,7 @@ import com.gitee.dorive.query.entity.MergedRepository; import com.gitee.dorive.query.entity.QueryContext; import com.gitee.dorive.query.entity.QueryUnit; import com.gitee.dorive.query.impl.resolver.MergedRepositoryResolver; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import com.gitee.dorive.sql.api.Segment; import com.gitee.dorive.sql.entity.segment.*; import lombok.AllArgsConstructor; diff --git a/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java b/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java index 6f1f3f5a..7569488e 100644 --- a/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java +++ b/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java @@ -4,7 +4,7 @@ import com.gitee.dorive.api.util.ReflectUtils; import com.gitee.dorive.core.api.context.Options; import com.gitee.dorive.core.config.RepositoryContext; import com.gitee.dorive.core.entity.executor.Page; -import com.gitee.dorive.query.repository.AbstractQueryRepository; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import com.gitee.dorive.web.entity.ResObject; import lombok.Getter; import lombok.Setter; -- Gitee From 0a0d0aa0a0953c58457f9c197b00325057666742 Mon Sep 17 00:00:00 2001 From: chenT <609580885@qq.com> Date: Wed, 16 Apr 2025 17:56:40 +0800 Subject: [PATCH 21/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=93=E5=82=A8?= =?UTF-8?q?=E5=8C=85=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisplus/DoriveMybatisPlusConfiguration.java | 2 +- .../plus/{ => impl}/executor/MybatisPlusExecutor.java | 2 +- .../mybatis/plus/{ => impl}/injector/EasySqlInjector.java | 2 +- .../plus/{ => impl}/repository/MybatisPlusRepository.java | 6 +++--- dorive-ref/src/main/java/com/gitee/dorive/ref/api/Ref.java | 2 +- .../src/main/java/com/gitee/dorive/ref/impl/RefImpl.java | 2 +- .../main/java/com/gitee/dorive/ref/impl/RefInjector.java | 2 +- .../ref/{ => impl}/repository/AbstractInnerRepository.java | 2 +- .../ref/{ => impl}/repository/AbstractRefRepository.java | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) rename dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/{ => impl}/executor/MybatisPlusExecutor.java (99%) rename dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/{ => impl}/injector/EasySqlInjector.java (96%) rename dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/{ => impl}/repository/MybatisPlusRepository.java (97%) rename dorive-ref/src/main/java/com/gitee/dorive/ref/{ => impl}/repository/AbstractInnerRepository.java (99%) rename dorive-ref/src/main/java/com/gitee/dorive/ref/{ => impl}/repository/AbstractRefRepository.java (96%) diff --git a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/mybatisplus/DoriveMybatisPlusConfiguration.java b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/mybatisplus/DoriveMybatisPlusConfiguration.java index 4c797147..a38f4fd3 100644 --- a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/mybatisplus/DoriveMybatisPlusConfiguration.java +++ b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/mybatisplus/DoriveMybatisPlusConfiguration.java @@ -22,7 +22,7 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.gitee.dorive.core.api.common.ImplFactory; import com.gitee.dorive.mybatis.plus.impl.DefaultImplFactory; -import com.gitee.dorive.mybatis.plus.injector.EasySqlInjector; +import com.gitee.dorive.mybatis.plus.impl.injector.EasySqlInjector; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.env.EnvironmentPostProcessor; diff --git a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/executor/MybatisPlusExecutor.java b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/executor/MybatisPlusExecutor.java similarity index 99% rename from dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/executor/MybatisPlusExecutor.java rename to dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/executor/MybatisPlusExecutor.java index 08fc929f..2a4b195d 100644 --- a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/executor/MybatisPlusExecutor.java +++ b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/executor/MybatisPlusExecutor.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.mybatis.plus.executor; +package com.gitee.dorive.mybatis.plus.impl.executor; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; diff --git a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/injector/EasySqlInjector.java b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/injector/EasySqlInjector.java similarity index 96% rename from dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/injector/EasySqlInjector.java rename to dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/injector/EasySqlInjector.java index 1341521d..53a88681 100644 --- a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/injector/EasySqlInjector.java +++ b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/injector/EasySqlInjector.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.mybatis.plus.injector; +package com.gitee.dorive.mybatis.plus.impl.injector; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.core.injector.AbstractMethod; diff --git a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/repository/MybatisPlusRepository.java b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/repository/MybatisPlusRepository.java similarity index 97% rename from dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/repository/MybatisPlusRepository.java rename to dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/repository/MybatisPlusRepository.java index 9b5754fa..a267ae1b 100644 --- a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/repository/MybatisPlusRepository.java +++ b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/repository/MybatisPlusRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.mybatis.plus.repository; +package com.gitee.dorive.mybatis.plus.impl.repository; import cn.hutool.core.lang.Assert; import cn.hutool.core.map.MapUtil; @@ -31,12 +31,12 @@ import com.gitee.dorive.core.api.common.MethodInvoker; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.executor.Executor; import com.gitee.dorive.core.entity.common.EntityStoreInfo; -import com.gitee.dorive.mybatis.plus.executor.MybatisPlusExecutor; +import com.gitee.dorive.mybatis.plus.impl.executor.MybatisPlusExecutor; import com.gitee.dorive.mybatis.plus.impl.DefaultMethodInvoker; import com.gitee.dorive.sql.impl.handler.SqlCustomQueryHandler; import com.gitee.dorive.query.api.QueryHandler; import com.gitee.dorive.query.entity.enums.QueryMethod; -import com.gitee.dorive.ref.repository.AbstractRefRepository; +import com.gitee.dorive.ref.impl.repository.AbstractRefRepository; import com.gitee.dorive.sql.api.CountQuerier; import com.gitee.dorive.sql.api.SqlRunner; import com.gitee.dorive.sql.entity.common.CountQuery; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/Ref.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/Ref.java index 746fc2a2..06c61315 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/api/Ref.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/api/Ref.java @@ -18,7 +18,7 @@ package com.gitee.dorive.ref.api; import com.gitee.dorive.query.api.QueryRepository; -import com.gitee.dorive.ref.repository.AbstractRefRepository; +import com.gitee.dorive.ref.impl.repository.AbstractRefRepository; public interface Ref extends QueryRepository { diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java index 4dc5419e..2a8154a0 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java @@ -23,7 +23,7 @@ import com.gitee.dorive.core.entity.executor.Page; import com.gitee.dorive.core.impl.repository.AbstractProxyRepository; import com.gitee.dorive.ref.api.Ref; import com.gitee.dorive.ref.api.RefObj; -import com.gitee.dorive.ref.repository.AbstractRefRepository; +import com.gitee.dorive.ref.impl.repository.AbstractRefRepository; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java index b95b86b5..78c29ae3 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java @@ -20,7 +20,7 @@ package com.gitee.dorive.ref.impl; import cn.hutool.core.util.ReflectUtil; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.ref.api.Ref; -import com.gitee.dorive.ref.repository.AbstractRefRepository; +import com.gitee.dorive.ref.impl.repository.AbstractRefRepository; import lombok.Data; import java.lang.reflect.Field; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractInnerRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractInnerRepository.java similarity index 99% rename from dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractInnerRepository.java rename to dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractInnerRepository.java index 7c659774..3bfa02ca 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractInnerRepository.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractInnerRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.ref.repository; +package com.gitee.dorive.ref.impl.repository; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.context.Options; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractRefRepository.java similarity index 96% rename from dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java rename to dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractRefRepository.java index 6ac49ba2..66161c69 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/repository/AbstractRefRepository.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractRefRepository.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.ref.repository; +package com.gitee.dorive.ref.impl.repository; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.ref.impl.RefInjector; -- Gitee From 7f38ed99b5ad1ce8e58dd785cc1320bda89e756b Mon Sep 17 00:00:00 2001 From: chenT <609580885@qq.com> Date: Wed, 16 Apr 2025 18:01:06 +0800 Subject: [PATCH 22/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=93=E5=82=A8?= =?UTF-8?q?=E5=8C=85=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/module/impl/ModuleLauncher.java | 2 +- .../module/impl/factory/ModuleDefaultListableBeanFactory.java | 4 ++-- .../module/impl/inject/ModuleAutowiredBeanPostProcessor.java | 2 +- .../inject/ModuleCglibSubclassingInstantiationStrategy.java | 2 +- .../gitee/dorive/module/impl/parser/AbstractModuleParser.java | 2 +- .../dorive/module/{impl => }/util/BeanAnnotationHelper.java | 2 +- .../gitee/dorive/module/{impl => }/util/BeanFactoryUtils.java | 2 +- .../com/gitee/dorive/module/{impl => }/util/ClassUtils.java | 2 +- .../gitee/dorive/module/{impl => }/util/SpringClassUtils.java | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) rename dorive-module/src/main/java/com/gitee/dorive/module/{impl => }/util/BeanAnnotationHelper.java (97%) rename dorive-module/src/main/java/com/gitee/dorive/module/{impl => }/util/BeanFactoryUtils.java (98%) rename dorive-module/src/main/java/com/gitee/dorive/module/{impl => }/util/ClassUtils.java (97%) rename dorive-module/src/main/java/com/gitee/dorive/module/{impl => }/util/SpringClassUtils.java (98%) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/ModuleLauncher.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/ModuleLauncher.java index 242b15e3..f027a487 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/ModuleLauncher.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/ModuleLauncher.java @@ -20,7 +20,7 @@ package com.gitee.dorive.module.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.URLUtil; -import com.gitee.dorive.module.impl.util.ClassUtils; +import com.gitee.dorive.module.util.ClassUtils; import org.apache.commons.lang3.StringUtils; import java.io.File; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java index e0ce0657..9005bead 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java @@ -27,7 +27,7 @@ import com.gitee.dorive.module.entity.ModuleDefinition; import com.gitee.dorive.module.impl.environment.ModuleContextAnnotationAutowireCandidateResolver; import com.gitee.dorive.module.impl.inject.ModuleCglibSubclassingInstantiationStrategy; import com.gitee.dorive.module.impl.parser.DefaultModuleParser; -import com.gitee.dorive.module.impl.util.SpringClassUtils; +import com.gitee.dorive.module.util.SpringClassUtils; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; @@ -48,7 +48,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static com.gitee.dorive.module.impl.util.BeanAnnotationHelper.BEAN_NAME_CACHE; +import static com.gitee.dorive.module.util.BeanAnnotationHelper.BEAN_NAME_CACHE; @Getter @Setter diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java index 8c042ff8..7f8a69bd 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java @@ -21,7 +21,7 @@ import cn.hutool.core.util.ReflectUtil; import com.gitee.dorive.module.api.ModuleChecker; import com.gitee.dorive.module.api.ModuleParser; import com.gitee.dorive.module.impl.parser.DefaultModuleParser; -import com.gitee.dorive.module.impl.util.BeanFactoryUtils; +import com.gitee.dorive.module.util.BeanFactoryUtils; import lombok.Getter; import lombok.Setter; import org.springframework.beans.BeansException; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleCglibSubclassingInstantiationStrategy.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleCglibSubclassingInstantiationStrategy.java index 1f69e694..47b38d22 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleCglibSubclassingInstantiationStrategy.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleCglibSubclassingInstantiationStrategy.java @@ -20,7 +20,7 @@ package com.gitee.dorive.module.impl.inject; import com.gitee.dorive.module.api.ModuleChecker; import com.gitee.dorive.module.api.ModuleParser; import com.gitee.dorive.module.impl.parser.DefaultModuleParser; -import com.gitee.dorive.module.impl.util.BeanFactoryUtils; +import com.gitee.dorive.module.util.BeanFactoryUtils; import lombok.Getter; import lombok.Setter; import org.springframework.beans.factory.BeanFactory; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java index f14fb0db..fc8db3d4 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java @@ -21,7 +21,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.gitee.dorive.module.api.ModuleParser; import com.gitee.dorive.module.entity.ModuleDefinition; -import com.gitee.dorive.module.impl.util.ClassUtils; +import com.gitee.dorive.module.util.ClassUtils; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanAnnotationHelper.java b/dorive-module/src/main/java/com/gitee/dorive/module/util/BeanAnnotationHelper.java similarity index 97% rename from dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanAnnotationHelper.java rename to dorive-module/src/main/java/com/gitee/dorive/module/util/BeanAnnotationHelper.java index 9eb59552..124b3de0 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanAnnotationHelper.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/util/BeanAnnotationHelper.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.module.impl.util; +package com.gitee.dorive.module.util; import cn.hutool.core.util.ReflectUtil; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanFactoryUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/util/BeanFactoryUtils.java similarity index 98% rename from dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanFactoryUtils.java rename to dorive-module/src/main/java/com/gitee/dorive/module/util/BeanFactoryUtils.java index d2b08778..c998b7c4 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanFactoryUtils.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/util/BeanFactoryUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.module.impl.util; +package com.gitee.dorive.module.util; import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ReflectUtil; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/ClassUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/util/ClassUtils.java similarity index 97% rename from dorive-module/src/main/java/com/gitee/dorive/module/impl/util/ClassUtils.java rename to dorive-module/src/main/java/com/gitee/dorive/module/util/ClassUtils.java index 20eddca6..0d518bda 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/ClassUtils.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/util/ClassUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.module.impl.util; +package com.gitee.dorive.module.util; import java.net.URI; import java.security.CodeSource; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/util/SpringClassUtils.java similarity index 98% rename from dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java rename to dorive-module/src/main/java/com/gitee/dorive/module/util/SpringClassUtils.java index de813230..540d5523 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/util/SpringClassUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.module.impl.util; +package com.gitee.dorive.module.util; import cn.hutool.core.util.ClassUtil; import org.springframework.beans.factory.config.BeanDefinition; -- Gitee From cdadc079f87a00a426eab4db6bf3eab6215d40cd Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Wed, 16 Apr 2025 20:10:53 +0800 Subject: [PATCH 23/43] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=8C=85=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/core/EntityDefinitionResolver.java | 2 +- .../impl/query/QueryDefinitionResolver.java | 2 +- .../api/{ => impl}/util/ReflectUtils.java | 2 +- .../dorive/core/config/RepositoryContext.java | 2 +- .../core/entity/executor/Criterion.java | 2 +- .../dorive/core/entity/executor/Example.java | 2 +- .../impl/handler/eo/BatchEntityOpHandler.java | 2 +- .../handler/joiner/MultiEntityHandler.java | 2 +- .../repository/AbstractContextRepository.java | 2 +- .../repository/AbstractGenericRepository.java | 2 +- .../impl/repository/CommonRepository.java | 2 +- .../core/{ => impl}/util/CollectionUtils.java | 2 +- .../core/{ => impl}/util/CriterionUtils.java | 2 +- .../core/{ => impl}/util/ExampleUtils.java | 2 +- .../core/{ => impl}/util/MultiInBuilder.java | 2 +- .../core/{ => impl}/util/StringUtils.java | 2 +- .../dorive/module/impl/ModuleLauncher.java | 2 +- .../ModuleDefaultListableBeanFactory.java | 4 ++-- .../ModuleAutowiredBeanPostProcessor.java | 2 +- ...CglibSubclassingInstantiationStrategy.java | 2 +- .../impl/parser/AbstractModuleParser.java | 2 +- .../{ => impl}/util/BeanAnnotationHelper.java | 2 +- .../{ => impl}/util/BeanFactoryUtils.java | 2 +- .../module/{ => impl}/util/ClassUtils.java | 2 +- .../{ => impl}/util/SpringClassUtils.java | 2 +- .../mybatis/plus/entity/LambdaExample.java | 2 +- .../plus/{ => impl}/util/LambdaUtils.java | 2 +- .../impl/handler/StepwiseQueryHandler.java | 2 +- .../impl/resolver/QueryExampleResolver.java | 2 +- .../ref/impl/{ => injector}/RefImpl.java | 2 +- .../ref/impl/{ => injector}/RefInjector.java | 2 +- .../ref/impl/{ => injector}/RefObjImpl.java | 2 +- .../repository/AbstractInnerRepository.java | 2 +- .../repository/AbstractRefRepository.java | 2 +- .../sql/impl/segment/SegmentResolver.java | 2 +- .../dorive/web/impl/service/BaseService.java | 19 ++++++++++++++++++- 36 files changed, 54 insertions(+), 37 deletions(-) rename dorive-api/src/main/java/com/gitee/dorive/api/{ => impl}/util/ReflectUtils.java (98%) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/util/CollectionUtils.java (96%) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/util/CriterionUtils.java (98%) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/util/ExampleUtils.java (98%) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/util/MultiInBuilder.java (98%) rename dorive-core/src/main/java/com/gitee/dorive/core/{ => impl}/util/StringUtils.java (97%) rename dorive-module/src/main/java/com/gitee/dorive/module/{ => impl}/util/BeanAnnotationHelper.java (97%) rename dorive-module/src/main/java/com/gitee/dorive/module/{ => impl}/util/BeanFactoryUtils.java (98%) rename dorive-module/src/main/java/com/gitee/dorive/module/{ => impl}/util/ClassUtils.java (97%) rename dorive-module/src/main/java/com/gitee/dorive/module/{ => impl}/util/SpringClassUtils.java (98%) rename dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/{ => impl}/util/LambdaUtils.java (96%) rename dorive-ref/src/main/java/com/gitee/dorive/ref/impl/{ => injector}/RefImpl.java (98%) rename dorive-ref/src/main/java/com/gitee/dorive/ref/impl/{ => injector}/RefInjector.java (98%) rename dorive-ref/src/main/java/com/gitee/dorive/ref/impl/{ => injector}/RefObjImpl.java (98%) diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/impl/core/EntityDefinitionResolver.java b/dorive-api/src/main/java/com/gitee/dorive/api/impl/core/EntityDefinitionResolver.java index 9c7379d6..1a8cbe69 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/impl/core/EntityDefinitionResolver.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/impl/core/EntityDefinitionResolver.java @@ -28,7 +28,7 @@ import com.gitee.dorive.api.entity.core.FieldDefinition; import com.gitee.dorive.api.entity.core.FieldEntityDefinition; import com.gitee.dorive.api.entity.core.PropertyDefinition; import com.gitee.dorive.api.entity.core.def.*; -import com.gitee.dorive.api.util.ReflectUtils; +import com.gitee.dorive.api.impl.util.ReflectUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.core.annotation.AnnotatedElementUtils; diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/impl/query/QueryDefinitionResolver.java b/dorive-api/src/main/java/com/gitee/dorive/api/impl/query/QueryDefinitionResolver.java index d47641b0..159f5ebd 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/impl/query/QueryDefinitionResolver.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/impl/query/QueryDefinitionResolver.java @@ -23,7 +23,7 @@ import com.gitee.dorive.api.entity.query.QueryDefinition; import com.gitee.dorive.api.entity.query.QueryFieldDefinition; import com.gitee.dorive.api.entity.query.def.QueryDef; import com.gitee.dorive.api.entity.query.def.QueryFieldDef; -import com.gitee.dorive.api.util.ReflectUtils; +import com.gitee.dorive.api.impl.util.ReflectUtils; import org.apache.commons.lang3.StringUtils; import java.lang.reflect.Field; diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java b/dorive-api/src/main/java/com/gitee/dorive/api/impl/util/ReflectUtils.java similarity index 98% rename from dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java rename to dorive-api/src/main/java/com/gitee/dorive/api/impl/util/ReflectUtils.java index 92c020ce..2b121bf5 100644 --- a/dorive-api/src/main/java/com/gitee/dorive/api/util/ReflectUtils.java +++ b/dorive-api/src/main/java/com/gitee/dorive/api/impl/util/ReflectUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.api.util; +package com.gitee.dorive.api.impl.util; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java b/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java index 039caec7..840f58f6 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/config/RepositoryContext.java @@ -18,7 +18,7 @@ package com.gitee.dorive.core.config; import cn.hutool.core.util.ClassUtil; -import com.gitee.dorive.api.util.ReflectUtils; +import com.gitee.dorive.api.impl.util.ReflectUtils; import com.gitee.dorive.core.api.common.RepositoryPostProcessor; import com.gitee.dorive.core.impl.repository.AbstractContextRepository; import org.apache.commons.lang3.StringUtils; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Criterion.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Criterion.java index ff13143d..b54d6f60 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Criterion.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Criterion.java @@ -17,7 +17,7 @@ package com.gitee.dorive.core.entity.executor; -import com.gitee.dorive.core.util.CriterionUtils; +import com.gitee.dorive.core.impl.util.CriterionUtils; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Example.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Example.java index 50e08f38..736c75ac 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Example.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Example.java @@ -19,7 +19,7 @@ package com.gitee.dorive.core.entity.executor; import com.gitee.dorive.api.constant.core.Operator; import com.gitee.dorive.api.constant.core.Order; -import com.gitee.dorive.core.util.StringUtils; +import com.gitee.dorive.core.impl.util.StringUtils; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/BatchEntityOpHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/BatchEntityOpHandler.java index d35dae7b..9e33012f 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/BatchEntityOpHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/BatchEntityOpHandler.java @@ -29,7 +29,7 @@ import com.gitee.dorive.core.entity.operation.eop.Update; import com.gitee.dorive.core.impl.factory.OperationFactory; import com.gitee.dorive.core.impl.repository.AbstractContextRepository; import com.gitee.dorive.core.impl.repository.CommonRepository; -import com.gitee.dorive.core.util.CollectionUtils; +import com.gitee.dorive.core.impl.util.CollectionUtils; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/MultiEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/MultiEntityHandler.java index 7f43d099..e6ff7386 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/MultiEntityHandler.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/MultiEntityHandler.java @@ -24,7 +24,7 @@ import com.gitee.dorive.core.entity.executor.Result; import com.gitee.dorive.core.impl.binder.AbstractBinder; import com.gitee.dorive.core.impl.binder.StrongBinder; import com.gitee.dorive.core.impl.repository.CommonRepository; -import com.gitee.dorive.core.util.MultiInBuilder; +import com.gitee.dorive.core.impl.util.MultiInBuilder; import lombok.Getter; import lombok.Setter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java index 34c22640..8ddee9c5 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java @@ -28,7 +28,7 @@ import com.gitee.dorive.api.entity.core.def.OrderDef; import com.gitee.dorive.api.entity.core.def.RepositoryDef; import com.gitee.dorive.api.impl.core.EntityDefinitionResolver; import com.gitee.dorive.api.impl.core.EntityElementResolver; -import com.gitee.dorive.api.util.ReflectUtils; +import com.gitee.dorive.api.impl.util.ReflectUtils; import com.gitee.dorive.core.api.common.RepositoryPostProcessor; import com.gitee.dorive.core.api.executor.EntityHandler; import com.gitee.dorive.core.api.executor.EntityOpHandler; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractGenericRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractGenericRepository.java index 4e579aad..858174ba 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractGenericRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractGenericRepository.java @@ -27,7 +27,7 @@ import com.gitee.dorive.core.entity.operation.eop.Delete; import com.gitee.dorive.core.entity.operation.eop.Insert; import com.gitee.dorive.core.entity.operation.eop.Update; import com.gitee.dorive.core.impl.factory.OperationFactory; -import com.gitee.dorive.core.util.ExampleUtils; +import com.gitee.dorive.core.impl.util.ExampleUtils; import java.util.List; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/CommonRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/CommonRepository.java index d8bdcd18..11f463df 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/CommonRepository.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/CommonRepository.java @@ -33,7 +33,7 @@ import com.gitee.dorive.core.entity.operation.eop.InsertOrUpdate; import com.gitee.dorive.core.entity.operation.eop.Update; import com.gitee.dorive.core.impl.binder.StrongBinder; import com.gitee.dorive.core.impl.resolver.BinderResolver; -import com.gitee.dorive.core.util.ExampleUtils; +import com.gitee.dorive.core.impl.util.ExampleUtils; import lombok.Getter; import lombok.Setter; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/util/CollectionUtils.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/CollectionUtils.java similarity index 96% rename from dorive-core/src/main/java/com/gitee/dorive/core/util/CollectionUtils.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/util/CollectionUtils.java index ca16d4b5..2792159b 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/util/CollectionUtils.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/CollectionUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.util; +package com.gitee.dorive.core.impl.util; import java.util.ArrayList; import java.util.Collection; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/util/CriterionUtils.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/CriterionUtils.java similarity index 98% rename from dorive-core/src/main/java/com/gitee/dorive/core/util/CriterionUtils.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/util/CriterionUtils.java index 286b514c..1afc0b90 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/util/CriterionUtils.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/CriterionUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.util; +package com.gitee.dorive.core.impl.util; import cn.hutool.core.date.DateUtil; import cn.hutool.extra.spring.SpringUtil; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/util/ExampleUtils.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/ExampleUtils.java similarity index 98% rename from dorive-core/src/main/java/com/gitee/dorive/core/util/ExampleUtils.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/util/ExampleUtils.java index 67c97e20..a12a5469 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/util/ExampleUtils.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/ExampleUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.util; +package com.gitee.dorive.core.impl.util; import com.gitee.dorive.core.entity.executor.Criterion; import com.gitee.dorive.core.entity.executor.Example; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/util/MultiInBuilder.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/MultiInBuilder.java similarity index 98% rename from dorive-core/src/main/java/com/gitee/dorive/core/util/MultiInBuilder.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/util/MultiInBuilder.java index 9bfc4e47..888369d4 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/util/MultiInBuilder.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/MultiInBuilder.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.util; +package com.gitee.dorive.core.impl.util; import cn.hutool.core.util.StrUtil; import com.gitee.dorive.api.constant.core.Operator; diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/util/StringUtils.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/StringUtils.java similarity index 97% rename from dorive-core/src/main/java/com/gitee/dorive/core/util/StringUtils.java rename to dorive-core/src/main/java/com/gitee/dorive/core/impl/util/StringUtils.java index e50a346b..2380d6e9 100644 --- a/dorive-core/src/main/java/com/gitee/dorive/core/util/StringUtils.java +++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/StringUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.util; +package com.gitee.dorive.core.impl.util; import java.util.ArrayList; import java.util.Arrays; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/ModuleLauncher.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/ModuleLauncher.java index f027a487..242b15e3 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/ModuleLauncher.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/ModuleLauncher.java @@ -20,7 +20,7 @@ package com.gitee.dorive.module.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.URLUtil; -import com.gitee.dorive.module.util.ClassUtils; +import com.gitee.dorive.module.impl.util.ClassUtils; import org.apache.commons.lang3.StringUtils; import java.io.File; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java index 9005bead..e0ce0657 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/factory/ModuleDefaultListableBeanFactory.java @@ -27,7 +27,7 @@ import com.gitee.dorive.module.entity.ModuleDefinition; import com.gitee.dorive.module.impl.environment.ModuleContextAnnotationAutowireCandidateResolver; import com.gitee.dorive.module.impl.inject.ModuleCglibSubclassingInstantiationStrategy; import com.gitee.dorive.module.impl.parser.DefaultModuleParser; -import com.gitee.dorive.module.util.SpringClassUtils; +import com.gitee.dorive.module.impl.util.SpringClassUtils; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; @@ -48,7 +48,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static com.gitee.dorive.module.util.BeanAnnotationHelper.BEAN_NAME_CACHE; +import static com.gitee.dorive.module.impl.util.BeanAnnotationHelper.BEAN_NAME_CACHE; @Getter @Setter diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java index 7f8a69bd..8c042ff8 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleAutowiredBeanPostProcessor.java @@ -21,7 +21,7 @@ import cn.hutool.core.util.ReflectUtil; import com.gitee.dorive.module.api.ModuleChecker; import com.gitee.dorive.module.api.ModuleParser; import com.gitee.dorive.module.impl.parser.DefaultModuleParser; -import com.gitee.dorive.module.util.BeanFactoryUtils; +import com.gitee.dorive.module.impl.util.BeanFactoryUtils; import lombok.Getter; import lombok.Setter; import org.springframework.beans.BeansException; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleCglibSubclassingInstantiationStrategy.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleCglibSubclassingInstantiationStrategy.java index 47b38d22..1f69e694 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleCglibSubclassingInstantiationStrategy.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/ModuleCglibSubclassingInstantiationStrategy.java @@ -20,7 +20,7 @@ package com.gitee.dorive.module.impl.inject; import com.gitee.dorive.module.api.ModuleChecker; import com.gitee.dorive.module.api.ModuleParser; import com.gitee.dorive.module.impl.parser.DefaultModuleParser; -import com.gitee.dorive.module.util.BeanFactoryUtils; +import com.gitee.dorive.module.impl.util.BeanFactoryUtils; import lombok.Getter; import lombok.Setter; import org.springframework.beans.factory.BeanFactory; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java index fc8db3d4..f14fb0db 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java @@ -21,7 +21,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.gitee.dorive.module.api.ModuleParser; import com.gitee.dorive.module.entity.ModuleDefinition; -import com.gitee.dorive.module.util.ClassUtils; +import com.gitee.dorive.module.impl.util.ClassUtils; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/util/BeanAnnotationHelper.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanAnnotationHelper.java similarity index 97% rename from dorive-module/src/main/java/com/gitee/dorive/module/util/BeanAnnotationHelper.java rename to dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanAnnotationHelper.java index 124b3de0..9eb59552 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/util/BeanAnnotationHelper.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanAnnotationHelper.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.module.util; +package com.gitee.dorive.module.impl.util; import cn.hutool.core.util.ReflectUtil; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/util/BeanFactoryUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanFactoryUtils.java similarity index 98% rename from dorive-module/src/main/java/com/gitee/dorive/module/util/BeanFactoryUtils.java rename to dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanFactoryUtils.java index c998b7c4..d2b08778 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/util/BeanFactoryUtils.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/BeanFactoryUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.module.util; +package com.gitee.dorive.module.impl.util; import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ReflectUtil; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/util/ClassUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/ClassUtils.java similarity index 97% rename from dorive-module/src/main/java/com/gitee/dorive/module/util/ClassUtils.java rename to dorive-module/src/main/java/com/gitee/dorive/module/impl/util/ClassUtils.java index 0d518bda..20eddca6 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/util/ClassUtils.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/ClassUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.module.util; +package com.gitee.dorive.module.impl.util; import java.net.URI; import java.security.CodeSource; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/util/SpringClassUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java similarity index 98% rename from dorive-module/src/main/java/com/gitee/dorive/module/util/SpringClassUtils.java rename to dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java index 540d5523..de813230 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/util/SpringClassUtils.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.module.util; +package com.gitee.dorive.module.impl.util; import cn.hutool.core.util.ClassUtil; import org.springframework.beans.factory.config.BeanDefinition; diff --git a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/entity/LambdaExample.java b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/entity/LambdaExample.java index f90551a4..941f9010 100644 --- a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/entity/LambdaExample.java +++ b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/entity/LambdaExample.java @@ -21,7 +21,7 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.gitee.dorive.api.constant.core.Operator; import com.gitee.dorive.core.entity.executor.Criterion; import com.gitee.dorive.core.entity.executor.Example; -import com.gitee.dorive.mybatis.plus.util.LambdaUtils; +import com.gitee.dorive.mybatis.plus.impl.util.LambdaUtils; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; diff --git a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/util/LambdaUtils.java b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/util/LambdaUtils.java similarity index 96% rename from dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/util/LambdaUtils.java rename to dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/util/LambdaUtils.java index e1fe8f1d..329b66f7 100644 --- a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/util/LambdaUtils.java +++ b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/util/LambdaUtils.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.mybatis.plus.util; +package com.gitee.dorive.mybatis.plus.impl.util; import com.baomidou.mybatisplus.core.toolkit.support.LambdaMeta; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/StepwiseQueryHandler.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/StepwiseQueryHandler.java index 33e73672..0eb49465 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/StepwiseQueryHandler.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/StepwiseQueryHandler.java @@ -24,7 +24,7 @@ import com.gitee.dorive.core.impl.binder.StrongBinder; import com.gitee.dorive.core.impl.binder.ValueRouteBinder; import com.gitee.dorive.core.impl.resolver.BinderResolver; import com.gitee.dorive.core.impl.repository.CommonRepository; -import com.gitee.dorive.core.util.MultiInBuilder; +import com.gitee.dorive.core.impl.util.MultiInBuilder; import com.gitee.dorive.query.entity.MergedRepository; import com.gitee.dorive.query.entity.QueryContext; import com.gitee.dorive.query.entity.QueryUnit; diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryExampleResolver.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryExampleResolver.java index 141fe5ea..64fec983 100644 --- a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryExampleResolver.java +++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryExampleResolver.java @@ -26,7 +26,7 @@ import com.gitee.dorive.api.entity.query.QueryDefinition; import com.gitee.dorive.api.entity.query.QueryFieldDefinition; import com.gitee.dorive.api.entity.query.def.QueryFieldDef; import com.gitee.dorive.core.entity.executor.*; -import com.gitee.dorive.core.util.StringUtils; +import com.gitee.dorive.core.impl.util.StringUtils; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/injector/RefImpl.java similarity index 98% rename from dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java rename to dorive-ref/src/main/java/com/gitee/dorive/ref/impl/injector/RefImpl.java index 2a8154a0..835efc32 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefImpl.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/injector/RefImpl.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.ref.impl; +package com.gitee.dorive.ref.impl.injector; import com.gitee.dorive.core.api.context.Options; import com.gitee.dorive.core.api.executor.EntityHandler; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/injector/RefInjector.java similarity index 98% rename from dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java rename to dorive-ref/src/main/java/com/gitee/dorive/ref/impl/injector/RefInjector.java index 78c29ae3..7eb3b484 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefInjector.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/injector/RefInjector.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.ref.impl; +package com.gitee.dorive.ref.impl.injector; import cn.hutool.core.util.ReflectUtil; import com.gitee.dorive.core.api.executor.EntityHandler; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/injector/RefObjImpl.java similarity index 98% rename from dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java rename to dorive-ref/src/main/java/com/gitee/dorive/ref/impl/injector/RefObjImpl.java index 35ed9920..ff89241b 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/RefObjImpl.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/injector/RefObjImpl.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.ref.impl; +package com.gitee.dorive.ref.impl.injector; import com.gitee.dorive.core.api.context.Context; import com.gitee.dorive.core.api.context.Options; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractInnerRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractInnerRepository.java index 3bfa02ca..fc3f12ef 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractInnerRepository.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractInnerRepository.java @@ -23,7 +23,7 @@ import com.gitee.dorive.core.entity.context.DefaultContext; import com.gitee.dorive.core.entity.executor.Example; import com.gitee.dorive.core.entity.executor.InnerExample; import com.gitee.dorive.core.entity.executor.Page; -import com.gitee.dorive.core.util.ExampleUtils; +import com.gitee.dorive.core.impl.util.ExampleUtils; import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import java.util.List; diff --git a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractRefRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractRefRepository.java index 66161c69..99be48c8 100644 --- a/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractRefRepository.java +++ b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractRefRepository.java @@ -18,7 +18,7 @@ package com.gitee.dorive.ref.impl.repository; import com.gitee.dorive.core.api.executor.EntityHandler; -import com.gitee.dorive.ref.impl.RefInjector; +import com.gitee.dorive.ref.impl.injector.RefInjector; public abstract class AbstractRefRepository extends AbstractInnerRepository { diff --git a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java index 8d321a8f..aae9745e 100644 --- a/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java +++ b/dorive-sql/src/main/java/com/gitee/dorive/sql/impl/segment/SegmentResolver.java @@ -27,7 +27,7 @@ import com.gitee.dorive.core.impl.binder.ValueFilterBinder; import com.gitee.dorive.core.impl.binder.ValueRouteBinder; import com.gitee.dorive.core.impl.resolver.BinderResolver; import com.gitee.dorive.core.impl.repository.CommonRepository; -import com.gitee.dorive.core.util.CriterionUtils; +import com.gitee.dorive.core.impl.util.CriterionUtils; import com.gitee.dorive.query.entity.MergedRepository; import com.gitee.dorive.query.entity.QueryContext; import com.gitee.dorive.query.entity.QueryUnit; diff --git a/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java b/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java index 7569488e..b2bedcbb 100644 --- a/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java +++ b/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java @@ -1,6 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.gitee.dorive.web.impl.service; -import com.gitee.dorive.api.util.ReflectUtils; +import com.gitee.dorive.api.impl.util.ReflectUtils; import com.gitee.dorive.core.api.context.Options; import com.gitee.dorive.core.config.RepositoryContext; import com.gitee.dorive.core.entity.executor.Page; -- Gitee From 9fb4e8a7fb617334c3b44a60ad01a82c38f3f10d Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Wed, 16 Apr 2025 22:22:23 +0800 Subject: [PATCH 24/43] =?UTF-8?q?=E8=A1=A5=E5=85=85=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 49 +++++++++++++++++++++++-------------------- doc/img/entity.png | Bin 150728 -> 0 bytes doc/img/logic.png | Bin 0 -> 150891 bytes doc/img/physical.png | Bin 0 -> 257148 bytes pom.xml | 2 +- 5 files changed, 27 insertions(+), 24 deletions(-) delete mode 100644 doc/img/entity.png create mode 100644 doc/img/logic.png create mode 100644 doc/img/physical.png diff --git a/README.md b/README.md index 4ffc6f6f..4a72ae65 100644 --- a/README.md +++ b/README.md @@ -30,13 +30,15 @@ dorive = domain + driven 或 do + driven ,是原公司项目沉淀后的开源 - 每个模块都具备独立运行的能力。 - 每个模块都能单独测试。 +- 允许同个模块不同版本,同时存在。 - 模块之间配置、命名空间隔离。 +- 模块与模块的配置、脚本等生命周期一致。 - 模块可选择向外暴露的bean。 - 模块之间不直接依赖,可通过接口与事件进行交互。 ### 🛠️模型化 -一个模块由一个边界上下文与一个或多个模型组成。 +同个领域内的多个模块共享一个边界上下文。 边界上下文的作用: @@ -55,14 +57,14 @@ dorive开发框架实现了模块化、模型化的全部特性,你可以有 模块化、模型化的优势: -- 多个模块互不影响,多人协同开发项目,效率高。 -- 单个模块升级或回退,影响小。 -- 模块间调用关系简单,易维护。 -- 模块可嵌入其他项目,复用性好。 -- 模块提供接口,重写业务逻辑,拓展性好。 -- 建模后,可自动生成基本代码与脚本。 -- 可重写模型方法,定制业务逻辑。 -- 可监听模型事件,减少代码耦合度。 +- 多人协同,效率高。 +- 升级或回退,影响小。 +- 调用简单,易维护。 +- 无缝迁移,复用性好。 +- 面向对象,拓展性好。 +- 事件驱动,耦合度低。 +- 持续演进,技术负债低。 +- 代码生成,开发快。 ### 💬使用建议 @@ -81,25 +83,26 @@ dorive开发框架实现了模块化、模型化的全部特性,你可以有 com.gitee.digital-engine dorive-spring-boot-starter - 3.5.0.8 + 3.5.0.9 ``` 如果是存量项目,你还需要考虑兼容性: -| 所属 | 模块 | 说明 | 适配Spring Boot版本 | -| :----: | -------------------------- | ---------------- | ------------------- | -| 模块化 | dorive-module | 模块化核心实现 | 2.7.18 | -| 模块化 | dorive-test | 测试插件实现 | 2.7.18 | -| 模型化 | dorive-api | 领域建模范式 | 2.2.2 - 2.7.18 | -| 模型化 | dorive-core | 模型化核心实现 | 2.2.2 - 2.7.18 | -| 模型化 | dorive-event | 事件通知实现 | 2.2.2 - 2.7.18 | -| 模型化 | dorive-query | 关联查询实现 | 2.2.2 - 2.7.18 | -| 模型化 | dorive-ref | 仓储引用实现 | 2.2.2 - 2.7.18 | -| 模型化 | dorive-sql | 动态查询实现 | 2.2.2 - 2.7.18 | -| 模型化 | dorive-mybatis-plus | mybatis-plus适配 | 2.2.2 - 2.7.18 | -| 模型化 | dorive-web | web开发适配 | 2.2.2 - 2.7.18 | -| | dorive-spring-boot-starter | 启动器 | 2.2.2 - 2.7.18 | +| 模块 | 说明 | 模块 | 适配Spring Boot版本 | +| -------------------------- | ---------------- | ------ | ------------------- | +| dorive-api | 框架规范 | | | +| dorive-module | 模块化核心实现 | 模块化 | 2.7.18 | +| dorive-test | 测试插件实现 | 模块化 | 2.7.18 | +| dorive-core | 模型化核心实现 | 模型化 | 2.2.2 - 2.7.18 | +| dorive-event | 事件通知实现 | 模型化 | 2.2.2 - 2.7.18 | +| dorive-query | 关联查询实现 | 模型化 | 2.2.2 - 2.7.18 | +| dorive-ref | 仓储引用实现 | 模型化 | 2.2.2 - 2.7.18 | +| dorive-sql | 动态查询实现 | 模型化 | 2.2.2 - 2.7.18 | +| dorive-mybatis-plus | mybatis-plus适配 | 模型化 | 2.2.2 - 2.7.18 | +| dorive-web | web开发适配 | 模型化 | 2.2.2 - 2.7.18 | +| dorive-autoconfigure | 自动配置 | | | +| dorive-spring-boot-starter | 启动器 | | | ### 📝文档 diff --git a/doc/img/entity.png b/doc/img/entity.png deleted file mode 100644 index 1e46932e339e50efd4d4679cb2767c866ff43564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150728 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

<<@I{2Ki!&!!m-z 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�TcF7|Be>p;57G{U9Ypv1MBs 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 F{{{c0AT|I1 diff --git a/doc/img/logic.png b/doc/img/logic.png new file mode 100644 index 0000000000000000000000000000000000000000..7c10d2fb6979acce904044f6e17e440d97417e0b GIT binary patch literal 150891 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

W0%Og`>& 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 literal 0 HcmV?d00001 diff --git a/doc/img/physical.png b/doc/img/physical.png new file mode 100644 index 0000000000000000000000000000000000000000..d43c96b57af9cd8bb23877d3e064ab3b637af66c GIT binary patch literal 257148 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

BE8B?7EM7dgZ2e3JB?{375lSIw@Az6f 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

AyZL-I|gP4<~qE!{`YL_ifw8N>@5O3#v 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index e96ce27f..8a164955 100644 --- a/pom.xml +++ b/pom.xml @@ -29,9 +29,9 @@ + dorive-api dorive-module dorive-test - dorive-api dorive-core dorive-event dorive-query -- Gitee From db177b5564b6a320fdf4f030398fbebf6ba50bcc Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Wed, 16 Apr 2025 22:25:53 +0800 Subject: [PATCH 25/43] =?UTF-8?q?=E8=A1=A5=E5=85=85=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a72ae65..cd43fb59 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ dorive开发框架实现了模块化、模型化的全部特性,你可以有 | dorive-sql | 动态查询实现 | 模型化 | 2.2.2 - 2.7.18 | | dorive-mybatis-plus | mybatis-plus适配 | 模型化 | 2.2.2 - 2.7.18 | | dorive-web | web开发适配 | 模型化 | 2.2.2 - 2.7.18 | -| dorive-autoconfigure | 自动配置 | | | +| dorive-autoconfigure | 自动配置实现 | | | | dorive-spring-boot-starter | 启动器 | | | ### 📝文档 -- Gitee From a82fa472b27bb61aee7edc8668524c8f8bc79b49 Mon Sep 17 00:00:00 2001 From: chenT <609580885@qq.com> Date: Thu, 17 Apr 2025 14:30:51 +0800 Subject: [PATCH 26/43] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=A5=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=BF=A1=E6=81=AF=E4=BD=9C=E4=B8=BA=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E7=9A=84=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/DoriveModuleConfiguration.java | 14 ++++ .../module/impl/util/PlaceholderUtils.java | 23 ++++++ .../module/impl/util/SpringClassUtils.java | 8 ++ .../ModuleRequestMappingHandlerMapping.java | 75 +++++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 dorive-module/src/main/java/com/gitee/dorive/module/impl/util/PlaceholderUtils.java create mode 100644 dorive-module/src/main/java/com/gitee/dorive/module/impl/web/ModuleRequestMappingHandlerMapping.java diff --git a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java index bd5f595f..4f0c6523 100644 --- a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java +++ b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java @@ -20,11 +20,14 @@ package com.gitee.dorive.autoconfigure.module; import com.gitee.dorive.module.impl.filter.BoundedContextExposedBeanFilter; import com.gitee.dorive.module.impl.inject.BoundedContextBeanPostProcessor; import com.gitee.dorive.module.impl.inject.ModuleAutowiredBeanPostProcessor; +import com.gitee.dorive.module.impl.web.ModuleRequestMappingHandlerMapping; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; @Order(-100) @Configuration @@ -49,4 +52,15 @@ public class DoriveModuleConfiguration { return new ModuleAutowiredBeanPostProcessor(); } + @Bean("moduleWebMvcRegistrationsV3") + @ConditionalOnMissingClass + public static WebMvcRegistrations moduleWebMvcRegistrations() { + return new WebMvcRegistrations() { + @Override + public RequestMappingHandlerMapping getRequestMappingHandlerMapping() { + return new ModuleRequestMappingHandlerMapping(); + } + }; + } + } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/PlaceholderUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/PlaceholderUtils.java new file mode 100644 index 00000000..f345eb61 --- /dev/null +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/PlaceholderUtils.java @@ -0,0 +1,23 @@ +package com.gitee.dorive.module.impl.util; + +import org.springframework.util.PropertyPlaceholderHelper; + +public class PlaceholderUtils { + + private static final PropertyPlaceholderHelper PROPERTY_PLACEHOLDER_HELPER = + new PropertyPlaceholderHelper("${", "}"); + + public static boolean contains(String strValue) { + int startIndex = strValue.indexOf("${"); + if (startIndex != -1) { + int endIndex = strValue.indexOf("}", startIndex); + return endIndex != -1 && startIndex < endIndex; + } + return false; + } + + public static String replace(String strValue, PropertyPlaceholderHelper.PlaceholderResolver resolver) { + return PROPERTY_PLACEHOLDER_HELPER.replacePlaceholders(strValue, resolver); + } + +} diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java index de813230..301a875c 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java @@ -21,16 +21,20 @@ import cn.hutool.core.util.ClassUtil; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.DependencyDescriptor; +import java.lang.reflect.InvocationHandler; + public class SpringClassUtils { public static final String BEAN_ANNOTATION_HELPER_NAME = "org.springframework.context.annotation.BeanAnnotationHelper"; public static final String CONFIGURATION_CLASS_BEAN_DEFINITION_NAME = "org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$ConfigurationClassBeanDefinition"; public static final String STREAM_DEPENDENCY_DESCRIPTOR_NAME = "org.springframework.beans.factory.support.DefaultListableBeanFactory$StreamDependencyDescriptor"; public static final String MULTI_ELEMENT_DESCRIPTOR_NAME = "org.springframework.beans.factory.support.DefaultListableBeanFactory$MultiElementDescriptor"; + public static final String SYNTHESIZED_MERGED_ANNOTATION_INVOCATION_HANDLER_NAME = "org.springframework.core.annotation.SynthesizedMergedAnnotationInvocationHandler"; public static final Class BEAN_ANNOTATION_HELPER = ClassUtil.loadClass(BEAN_ANNOTATION_HELPER_NAME); public static final Class CONFIGURATION_CLASS_BEAN_DEFINITION = ClassUtil.loadClass(CONFIGURATION_CLASS_BEAN_DEFINITION_NAME); public static final Class STREAM_DEPENDENCY_DESCRIPTOR = ClassUtil.loadClass(STREAM_DEPENDENCY_DESCRIPTOR_NAME); public static final Class MULTI_ELEMENT_DESCRIPTOR = ClassUtil.loadClass(MULTI_ELEMENT_DESCRIPTOR_NAME); + public static final Class SYNTHESIZED_MERGED_ANNOTATION_INVOCATION_HANDLER = ClassUtil.loadClass(SYNTHESIZED_MERGED_ANNOTATION_INVOCATION_HANDLER_NAME); public static boolean isConfigurationBeanDefinition(BeanDefinition beanDefinition) { return beanDefinition != null && beanDefinition.getClass() == CONFIGURATION_CLASS_BEAN_DEFINITION; @@ -43,4 +47,8 @@ public class SpringClassUtils { public static boolean isMultiElementDescriptor(DependencyDescriptor descriptor) { return descriptor != null && descriptor.getClass() == MULTI_ELEMENT_DESCRIPTOR; } + + public static boolean isSynthesizedMergedAnnotationInvocationHandler(InvocationHandler invocationHandler) { + return invocationHandler != null && invocationHandler.getClass() == SYNTHESIZED_MERGED_ANNOTATION_INVOCATION_HANDLER; + } } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/web/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/web/ModuleRequestMappingHandlerMapping.java new file mode 100644 index 00000000..1864fe97 --- /dev/null +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/web/ModuleRequestMappingHandlerMapping.java @@ -0,0 +1,75 @@ +package com.gitee.dorive.module.impl.web; + +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import com.gitee.dorive.module.api.ModuleParser; +import com.gitee.dorive.module.entity.ModuleDefinition; +import com.gitee.dorive.module.impl.parser.DefaultModuleParser; +import com.gitee.dorive.module.impl.util.PlaceholderUtils; +import com.gitee.dorive.module.impl.util.SpringClassUtils; +import org.springframework.core.annotation.MergedAnnotation; +import org.springframework.lang.Nullable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.mvc.condition.RequestCondition; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.util.ArrayList; +import java.util.List; + +public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMapping { + + private ModuleParser moduleParser = DefaultModuleParser.INSTANCE; + + @Override + protected RequestMappingInfo createRequestMappingInfo( + RequestMapping requestMapping, @Nullable RequestCondition customCondition) { + String[] paths = requestMapping.path(); + paths = handlePaths(requestMapping, paths); + RequestMappingInfo.Builder builder = RequestMappingInfo + .paths(resolveEmbeddedValuesInPatterns(paths)) + .methods(requestMapping.method()) + .params(requestMapping.params()) + .headers(requestMapping.headers()) + .consumes(requestMapping.consumes()) + .produces(requestMapping.produces()) + .mappingName(requestMapping.name()); + if (customCondition != null) { + builder.customCondition(customCondition); + } + return builder.options(getBuilderConfiguration()).build(); + } + + private String[] handlePaths(RequestMapping requestMapping, String[] paths) { + if (requestMapping instanceof Proxy) { + InvocationHandler invocationHandler = Proxy.getInvocationHandler(requestMapping); + if (SpringClassUtils.isSynthesizedMergedAnnotationInvocationHandler(invocationHandler)) { + MergedAnnotation annotation = (MergedAnnotation) ReflectUtil.getFieldValue(invocationHandler, "annotation"); + Object source = annotation.getSource(); + if (source instanceof Class) { + Class sourceType = (Class) source; + if (moduleParser.isUnderScanPackage(sourceType.getName())) { + ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); + String name = moduleDefinition.getName(); + String version = moduleDefinition.getVersion(); + // 替换占位符 + List pathList = new ArrayList<>(paths.length); + for (String path : paths) { + if (PlaceholderUtils.contains(path)) { + path = PlaceholderUtils.replace(path, str -> "$$P$$" + name + "." + version + "." + str + "$$S$$"); + path = StrUtil.replace(path, "$$P$$", "${"); + path = StrUtil.replace(path, "$$S$$", "}"); + } + pathList.add(path); + } + paths = pathList.toArray(new String[0]); + } + } + } + } + return paths; + } + +} -- Gitee From c06a5d56234748997996719ef07a3e6db6daccd0 Mon Sep 17 00:00:00 2001 From: chenT <609580885@qq.com> Date: Thu, 17 Apr 2025 15:04:30 +0800 Subject: [PATCH 27/43] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=A5=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=BF=A1=E6=81=AF=E4=BD=9C=E4=B8=BA=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E7=9A=84=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/DoriveModuleConfiguration.java | 2 +- .../dorive/module/entity/ModuleDefinition.java | 8 ++++++++ .../module/impl/SpringModularApplication.java | 17 +++++++++-------- .../ModuleRequestMappingHandlerMapping.java | 2 +- 4 files changed, 19 insertions(+), 10 deletions(-) rename dorive-module/src/main/java/com/gitee/dorive/module/impl/{web => environment}/ModuleRequestMappingHandlerMapping.java (98%) diff --git a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java index 4f0c6523..2d50540a 100644 --- a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java +++ b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/module/DoriveModuleConfiguration.java @@ -20,7 +20,7 @@ package com.gitee.dorive.autoconfigure.module; import com.gitee.dorive.module.impl.filter.BoundedContextExposedBeanFilter; import com.gitee.dorive.module.impl.inject.BoundedContextBeanPostProcessor; import com.gitee.dorive.module.impl.inject.ModuleAutowiredBeanPostProcessor; -import com.gitee.dorive.module.impl.web.ModuleRequestMappingHandlerMapping; +import com.gitee.dorive.module.impl.environment.ModuleRequestMappingHandlerMapping; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations; diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java index 4e5e59f1..0ea65359 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java @@ -198,6 +198,14 @@ public class ModuleDefinition { return 2; } + public String getModulePathKey() { + return name + "." + version + ".module_path"; + } + + public String getModulePathValue() { + return name + "/" + version; + } + @Override public String toString() { List paths = new ArrayList<>(5); diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/SpringModularApplication.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/SpringModularApplication.java index 5481f0b2..676896fb 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/SpringModularApplication.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/SpringModularApplication.java @@ -38,25 +38,26 @@ public class SpringModularApplication { public static SpringApplicationBuilder build(Class primarySource) { ModuleLauncher.INSTANCE.tryLoadClasspathIdx(primarySource); + Set> sources = new LinkedHashSet<>(); + Set profiles = new LinkedHashSet<>(); + Map properties = new LinkedHashMap<>(); + BeanNameGenerator beanNameGenerator = new ModuleAnnotationBeanNameGenerator(); + ApplicationContextFactory applicationContextFactory = new ModuleApplicationContextFactory(); + ModuleParser moduleParser = DefaultModuleParser.INSTANCE; moduleParser.parse(); List moduleDefinitions = moduleParser.getModuleDefinitions(); - Set> sources = new LinkedHashSet<>(); - Set profiles = new LinkedHashSet<>(); + sources.add(primarySource); + properties.put("dorive.module.enable", true); for (ModuleDefinition moduleDefinition : moduleDefinitions) { Class mainClass = moduleDefinition.getMainClass(); if (mainClass != null) { sources.add(mainClass); } profiles.addAll(moduleDefinition.getProfiles()); + properties.put(moduleDefinition.getModulePathKey(), moduleDefinition.getModulePathValue()); } - sources.add(primarySource); - - Map properties = new LinkedHashMap<>(); - properties.put("dorive.module.enable", true); - BeanNameGenerator beanNameGenerator = new ModuleAnnotationBeanNameGenerator(); - ApplicationContextFactory applicationContextFactory = new ModuleApplicationContextFactory(); return new SpringApplicationBuilder(sources.toArray(new Class[0])) .profiles(profiles.toArray(new String[0])) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/web/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java similarity index 98% rename from dorive-module/src/main/java/com/gitee/dorive/module/impl/web/ModuleRequestMappingHandlerMapping.java rename to dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index 1864fe97..72e384a5 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/web/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -1,4 +1,4 @@ -package com.gitee.dorive.module.impl.web; +package com.gitee.dorive.module.impl.environment; import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; -- Gitee From f15791ba1835c2369a3e6dbcf36516075b3203af Mon Sep 17 00:00:00 2001 From: chenT <609580885@qq.com> Date: Thu, 17 Apr 2025 15:40:42 +0800 Subject: [PATCH 28/43] =?UTF-8?q?=E5=90=8C=E6=97=B6=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=92=8C=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleRequestMappingHandlerMapping.java | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index 72e384a5..d3761ec3 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -15,6 +15,7 @@ import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List; @@ -48,24 +49,28 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap if (SpringClassUtils.isSynthesizedMergedAnnotationInvocationHandler(invocationHandler)) { MergedAnnotation annotation = (MergedAnnotation) ReflectUtil.getFieldValue(invocationHandler, "annotation"); Object source = annotation.getSource(); + Class sourceType = null; if (source instanceof Class) { - Class sourceType = (Class) source; - if (moduleParser.isUnderScanPackage(sourceType.getName())) { - ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); - String name = moduleDefinition.getName(); - String version = moduleDefinition.getVersion(); - // 替换占位符 - List pathList = new ArrayList<>(paths.length); - for (String path : paths) { - if (PlaceholderUtils.contains(path)) { - path = PlaceholderUtils.replace(path, str -> "$$P$$" + name + "." + version + "." + str + "$$S$$"); - path = StrUtil.replace(path, "$$P$$", "${"); - path = StrUtil.replace(path, "$$S$$", "}"); - } - pathList.add(path); + sourceType = (Class) source; + + } else if (source instanceof Method) { + sourceType = ((Method) source).getDeclaringClass(); + } + if (sourceType != null && moduleParser.isUnderScanPackage(sourceType.getName())) { + ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); + String name = moduleDefinition.getName(); + String version = moduleDefinition.getVersion(); + // 替换占位符 + List pathList = new ArrayList<>(paths.length); + for (String path : paths) { + if (PlaceholderUtils.contains(path)) { + path = PlaceholderUtils.replace(path, str -> "$$P$$" + name + "." + version + "." + str + "$$S$$"); + path = StrUtil.replace(path, "$$P$$", "${"); + path = StrUtil.replace(path, "$$S$$", "}"); } - paths = pathList.toArray(new String[0]); + pathList.add(path); } + paths = pathList.toArray(new String[0]); } } } -- Gitee From 22837814b5e2b9de1f1ae87609db2ec6086d2e1b Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Thu, 17 Apr 2025 20:26:43 +0800 Subject: [PATCH 29/43] =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/entity/ModuleDefinition.java | 4 +++ ...xtAnnotationAutowireCandidateResolver.java | 4 +-- .../ModuleEnvironmentPostProcessor.java | 4 +-- .../ModuleRequestMappingHandlerMapping.java | 25 ++++++++++++++++--- 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java index 0ea65359..34072491 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java @@ -198,6 +198,10 @@ public class ModuleDefinition { return 2; } + public String getPropertiesPrefix() { + return name + "." + version + "."; + } + public String getModulePathKey() { return name + "." + version + ".module_path"; } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleContextAnnotationAutowireCandidateResolver.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleContextAnnotationAutowireCandidateResolver.java index f2817ae2..e6f333e5 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleContextAnnotationAutowireCandidateResolver.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleContextAnnotationAutowireCandidateResolver.java @@ -41,12 +41,10 @@ public class ModuleContextAnnotationAutowireCandidateResolver extends ContextAnn if (declaringClass != null && moduleParser.isUnderScanPackage(declaringClass.getName())) { ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(declaringClass); if (moduleDefinition != null) { - String name = moduleDefinition.getName(); - String version = moduleDefinition.getVersion(); String strValue = (String) value; if (strValue.startsWith("${") && strValue.endsWith("}")) { strValue = StrUtil.removePrefix(strValue, "${"); - return "${" + name + "." + version + "." + strValue; + return "${" + moduleDefinition.getPropertiesPrefix() + strValue; } } } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleEnvironmentPostProcessor.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleEnvironmentPostProcessor.java index e3e0efa3..844ffd56 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleEnvironmentPostProcessor.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleEnvironmentPostProcessor.java @@ -59,10 +59,8 @@ public class ModuleEnvironmentPostProcessor implements EnvironmentPostProcessor, if (source instanceof Map) { Map map = (Map) source; if (!map.isEmpty()) { - String moduleName = moduleDefinition.getName(); - String moduleVersion = moduleDefinition.getVersion(); Map newMap = new LinkedHashMap<>(); - map.forEach((key, value) -> newMap.put(moduleName + "." + moduleVersion + "." + key, value)); + map.forEach((key, value) -> newMap.put(moduleDefinition.getPropertiesPrefix() + key, value)); PropertySource newPropertySource = new OriginTrackedMapPropertySource(name, Collections.unmodifiableMap(newMap)); propertySources.replace(name, newPropertySource); } diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index d3761ec3..e3b721b1 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -1,3 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.gitee.dorive.module.impl.environment; import cn.hutool.core.util.ReflectUtil; @@ -7,6 +24,8 @@ import com.gitee.dorive.module.entity.ModuleDefinition; import com.gitee.dorive.module.impl.parser.DefaultModuleParser; import com.gitee.dorive.module.impl.util.PlaceholderUtils; import com.gitee.dorive.module.impl.util.SpringClassUtils; +import lombok.Getter; +import lombok.Setter; import org.springframework.core.annotation.MergedAnnotation; import org.springframework.lang.Nullable; import org.springframework.web.bind.annotation.RequestMapping; @@ -20,6 +39,8 @@ import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List; +@Getter +@Setter public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMapping { private ModuleParser moduleParser = DefaultModuleParser.INSTANCE; @@ -58,13 +79,11 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap } if (sourceType != null && moduleParser.isUnderScanPackage(sourceType.getName())) { ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); - String name = moduleDefinition.getName(); - String version = moduleDefinition.getVersion(); // 替换占位符 List pathList = new ArrayList<>(paths.length); for (String path : paths) { if (PlaceholderUtils.contains(path)) { - path = PlaceholderUtils.replace(path, str -> "$$P$$" + name + "." + version + "." + str + "$$S$$"); + path = PlaceholderUtils.replace(path, str -> "$$P$$" + moduleDefinition.getPropertiesPrefix() + str + "$$S$$"); path = StrUtil.replace(path, "$$P$$", "${"); path = StrUtil.replace(path, "$$S$$", "}"); } -- Gitee From 0f650a1a4ece140223e1f67ffb92048d7be37e3f Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Thu, 17 Apr 2025 20:31:58 +0800 Subject: [PATCH 30/43] =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/environment/ModuleRequestMappingHandlerMapping.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index e3b721b1..69cc364c 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -83,7 +83,7 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap List pathList = new ArrayList<>(paths.length); for (String path : paths) { if (PlaceholderUtils.contains(path)) { - path = PlaceholderUtils.replace(path, str -> "$$P$$" + moduleDefinition.getPropertiesPrefix() + str + "$$S$$"); + path = PlaceholderUtils.replace(path, strValue -> "$$P$$" + moduleDefinition.getPropertiesPrefix() + strValue + "$$S$$"); path = StrUtil.replace(path, "$$P$$", "${"); path = StrUtil.replace(path, "$$S$$", "}"); } -- Gitee From 4f1ea904e0b45304749e590224b47948cee3723c Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Thu, 17 Apr 2025 20:53:00 +0800 Subject: [PATCH 31/43] =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/environment/ModuleRequestMappingHandlerMapping.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index 69cc364c..b5afca84 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -65,6 +65,9 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap } private String[] handlePaths(RequestMapping requestMapping, String[] paths) { + if (paths.length == 1 && !paths[0].contains("$")) { + return paths; + } if (requestMapping instanceof Proxy) { InvocationHandler invocationHandler = Proxy.getInvocationHandler(requestMapping); if (SpringClassUtils.isSynthesizedMergedAnnotationInvocationHandler(invocationHandler)) { -- Gitee From 49a838af5a2cdc62970c91331e00f3f2bcea3ae2 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Thu, 17 Apr 2025 21:50:23 +0800 Subject: [PATCH 32/43] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleRequestMappingHandlerMapping.java | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index b5afca84..65367f19 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -38,12 +38,15 @@ import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; @Getter @Setter public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMapping { private ModuleParser moduleParser = DefaultModuleParser.INSTANCE; + private Map, String[]> classRequestMappingPathsCache = new ConcurrentHashMap<>(); @Override protected RequestMappingInfo createRequestMappingInfo( @@ -65,6 +68,9 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap } private String[] handlePaths(RequestMapping requestMapping, String[] paths) { + if (paths == null || paths.length == 0) { + return paths; + } if (paths.length == 1 && !paths[0].contains("$")) { return paths; } @@ -81,18 +87,26 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap sourceType = ((Method) source).getDeclaringClass(); } if (sourceType != null && moduleParser.isUnderScanPackage(sourceType.getName())) { + String[] existPaths = classRequestMappingPathsCache.get(sourceType); + if (existPaths != null) { + return existPaths; + } ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); - // 替换占位符 - List pathList = new ArrayList<>(paths.length); - for (String path : paths) { - if (PlaceholderUtils.contains(path)) { - path = PlaceholderUtils.replace(path, strValue -> "$$P$$" + moduleDefinition.getPropertiesPrefix() + strValue + "$$S$$"); - path = StrUtil.replace(path, "$$P$$", "${"); - path = StrUtil.replace(path, "$$S$$", "}"); + if (moduleDefinition != null) { + // 替换占位符 + List pathList = new ArrayList<>(paths.length); + for (String path : paths) { + if (PlaceholderUtils.contains(path)) { + path = PlaceholderUtils.replace(path, strValue -> "$$P$$" + moduleDefinition.getPropertiesPrefix() + strValue + "$$S$$"); + path = StrUtil.replace(path, "$$P$$", "${"); + path = StrUtil.replace(path, "$$S$$", "}"); + } + pathList.add(path); } - pathList.add(path); + String[] newPaths = pathList.toArray(new String[0]); + classRequestMappingPathsCache.put(sourceType, newPaths); + return newPaths; } - paths = pathList.toArray(new String[0]); } } } -- Gitee From d5b3cbe2a0f91587243ce3e6d47b8a3100dcebee Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Thu, 17 Apr 2025 22:14:08 +0800 Subject: [PATCH 33/43] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleRequestMappingHandlerMapping.java | 58 +++++++++++-------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index 65367f19..fda21a76 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -79,33 +79,27 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap if (SpringClassUtils.isSynthesizedMergedAnnotationInvocationHandler(invocationHandler)) { MergedAnnotation annotation = (MergedAnnotation) ReflectUtil.getFieldValue(invocationHandler, "annotation"); Object source = annotation.getSource(); - Class sourceType = null; if (source instanceof Class) { - sourceType = (Class) source; + Class sourceType = (Class) source; + if (moduleParser.isUnderScanPackage(sourceType.getName())) { + String[] existPaths = classRequestMappingPathsCache.get(sourceType); + if (existPaths != null) { + return existPaths; + } + String[] newPaths = doHandlePaths(paths, sourceType); + if (newPaths != null) { + classRequestMappingPathsCache.put(sourceType, newPaths); + return newPaths; + } + } } else if (source instanceof Method) { - sourceType = ((Method) source).getDeclaringClass(); - } - if (sourceType != null && moduleParser.isUnderScanPackage(sourceType.getName())) { - String[] existPaths = classRequestMappingPathsCache.get(sourceType); - if (existPaths != null) { - return existPaths; - } - ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); - if (moduleDefinition != null) { - // 替换占位符 - List pathList = new ArrayList<>(paths.length); - for (String path : paths) { - if (PlaceholderUtils.contains(path)) { - path = PlaceholderUtils.replace(path, strValue -> "$$P$$" + moduleDefinition.getPropertiesPrefix() + strValue + "$$S$$"); - path = StrUtil.replace(path, "$$P$$", "${"); - path = StrUtil.replace(path, "$$S$$", "}"); - } - pathList.add(path); + Class sourceType = ((Method) source).getDeclaringClass(); + if (moduleParser.isUnderScanPackage(sourceType.getName())) { + String[] newPaths = doHandlePaths(paths, sourceType); + if (newPaths != null) { + return newPaths; } - String[] newPaths = pathList.toArray(new String[0]); - classRequestMappingPathsCache.put(sourceType, newPaths); - return newPaths; } } } @@ -113,4 +107,22 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap return paths; } + private String[] doHandlePaths(String[] paths, Class sourceType) { + ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); + if (moduleDefinition != null) { + // 替换占位符 + List pathList = new ArrayList<>(paths.length); + for (String path : paths) { + if (PlaceholderUtils.contains(path)) { + path = PlaceholderUtils.replace(path, strValue -> "$$P$$" + moduleDefinition.getPropertiesPrefix() + strValue + "$$S$$"); + path = StrUtil.replace(path, "$$P$$", "${"); + path = StrUtil.replace(path, "$$S$$", "}"); + } + pathList.add(path); + } + return pathList.toArray(new String[0]); + } + return null; + } + } -- Gitee From ec195dbfd4007f6c7f6cccd721cee1f2325f0dcc Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Thu, 17 Apr 2025 22:16:16 +0800 Subject: [PATCH 34/43] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../environment/ModuleRequestMappingHandlerMapping.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index fda21a76..91110193 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -86,7 +86,7 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap if (existPaths != null) { return existPaths; } - String[] newPaths = doHandlePaths(paths, sourceType); + String[] newPaths = doHandlePaths(sourceType, paths); if (newPaths != null) { classRequestMappingPathsCache.put(sourceType, newPaths); return newPaths; @@ -96,7 +96,7 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap } else if (source instanceof Method) { Class sourceType = ((Method) source).getDeclaringClass(); if (moduleParser.isUnderScanPackage(sourceType.getName())) { - String[] newPaths = doHandlePaths(paths, sourceType); + String[] newPaths = doHandlePaths(sourceType, paths); if (newPaths != null) { return newPaths; } @@ -107,7 +107,7 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap return paths; } - private String[] doHandlePaths(String[] paths, Class sourceType) { + private String[] doHandlePaths(Class sourceType, String[] paths) { ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); if (moduleDefinition != null) { // 替换占位符 -- Gitee From 85944af633ab9f1f1b3cd5ba87d9ccec96994e94 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 19 Apr 2025 23:15:41 +0800 Subject: [PATCH 35/43] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleRequestMappingHandlerMapping.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index 91110193..fd1d06ad 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -79,27 +79,28 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap if (SpringClassUtils.isSynthesizedMergedAnnotationInvocationHandler(invocationHandler)) { MergedAnnotation annotation = (MergedAnnotation) ReflectUtil.getFieldValue(invocationHandler, "annotation"); Object source = annotation.getSource(); + Class sourceType = null; + boolean needCache = false; if (source instanceof Class) { - Class sourceType = (Class) source; - if (moduleParser.isUnderScanPackage(sourceType.getName())) { + sourceType = (Class) source; + needCache = true; + + } else if (source instanceof Method) { + sourceType = ((Method) source).getDeclaringClass(); + } + if (sourceType != null && moduleParser.isUnderScanPackage(sourceType.getName())) { + if (needCache) { String[] existPaths = classRequestMappingPathsCache.get(sourceType); if (existPaths != null) { return existPaths; } - String[] newPaths = doHandlePaths(sourceType, paths); - if (newPaths != null) { - classRequestMappingPathsCache.put(sourceType, newPaths); - return newPaths; - } } - - } else if (source instanceof Method) { - Class sourceType = ((Method) source).getDeclaringClass(); - if (moduleParser.isUnderScanPackage(sourceType.getName())) { - String[] newPaths = doHandlePaths(sourceType, paths); - if (newPaths != null) { - return newPaths; - } + String[] newPaths = doHandlePaths(sourceType, paths); + if (needCache) { + classRequestMappingPathsCache.put(sourceType, newPaths); + } + if (newPaths != null) { + return newPaths; } } } @@ -122,7 +123,7 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap } return pathList.toArray(new String[0]); } - return null; + return paths; } } -- Gitee From 3dc736c9efe3d827ec6df93a428cd2550350c978 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 19 Apr 2025 23:18:39 +0800 Subject: [PATCH 36/43] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../environment/ModuleRequestMappingHandlerMapping.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index fd1d06ad..9dbae546 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -96,10 +96,10 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap } } String[] newPaths = doHandlePaths(sourceType, paths); - if (needCache) { - classRequestMappingPathsCache.put(sourceType, newPaths); - } if (newPaths != null) { + if (needCache) { + classRequestMappingPathsCache.put(sourceType, newPaths); + } return newPaths; } } -- Gitee From 4927ae0f6c80154129932d179998d247499e0234 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sat, 19 Apr 2025 23:27:32 +0800 Subject: [PATCH 37/43] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleRequestMappingHandlerMapping.java | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index 9dbae546..1a7e2d47 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -95,8 +95,9 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap return existPaths; } } - String[] newPaths = doHandlePaths(sourceType, paths); - if (newPaths != null) { + ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); + if (moduleDefinition != null) { + String[] newPaths = doHandlePaths(moduleDefinition.getPropertiesPrefix(), paths); if (needCache) { classRequestMappingPathsCache.put(sourceType, newPaths); } @@ -108,22 +109,18 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap return paths; } - private String[] doHandlePaths(Class sourceType, String[] paths) { - ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); - if (moduleDefinition != null) { - // 替换占位符 - List pathList = new ArrayList<>(paths.length); - for (String path : paths) { - if (PlaceholderUtils.contains(path)) { - path = PlaceholderUtils.replace(path, strValue -> "$$P$$" + moduleDefinition.getPropertiesPrefix() + strValue + "$$S$$"); - path = StrUtil.replace(path, "$$P$$", "${"); - path = StrUtil.replace(path, "$$S$$", "}"); - } - pathList.add(path); + private String[] doHandlePaths(String propertiesPrefix, String[] paths) { + // 替换占位符 + List pathList = new ArrayList<>(paths.length); + for (String path : paths) { + if (PlaceholderUtils.contains(path)) { + path = PlaceholderUtils.replace(path, strValue -> "$$P$$" + propertiesPrefix + strValue + "$$S$$"); + path = StrUtil.replace(path, "$$P$$", "${"); + path = StrUtil.replace(path, "$$S$$", "}"); } - return pathList.toArray(new String[0]); + pathList.add(path); } - return paths; + return pathList.toArray(new String[0]); } } -- Gitee From 1becb6eae7cc5f6ef999d5a4bc87d83615bab606 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 20 Apr 2025 11:46:18 +0800 Subject: [PATCH 38/43] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleRequestMappingHandlerMapping.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index 1a7e2d47..717e187f 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -79,27 +79,27 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap if (SpringClassUtils.isSynthesizedMergedAnnotationInvocationHandler(invocationHandler)) { MergedAnnotation annotation = (MergedAnnotation) ReflectUtil.getFieldValue(invocationHandler, "annotation"); Object source = annotation.getSource(); - Class sourceType = null; - boolean needCache = false; + Class clazz = null; + boolean isTypeAnnotated = false; if (source instanceof Class) { - sourceType = (Class) source; - needCache = true; + clazz = (Class) source; + isTypeAnnotated = true; } else if (source instanceof Method) { - sourceType = ((Method) source).getDeclaringClass(); + clazz = ((Method) source).getDeclaringClass(); } - if (sourceType != null && moduleParser.isUnderScanPackage(sourceType.getName())) { - if (needCache) { - String[] existPaths = classRequestMappingPathsCache.get(sourceType); + if (clazz != null && moduleParser.isUnderScanPackage(clazz.getName())) { + if (isTypeAnnotated) { + String[] existPaths = classRequestMappingPathsCache.get(clazz); if (existPaths != null) { return existPaths; } } - ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(sourceType); + ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(clazz); if (moduleDefinition != null) { String[] newPaths = doHandlePaths(moduleDefinition.getPropertiesPrefix(), paths); - if (needCache) { - classRequestMappingPathsCache.put(sourceType, newPaths); + if (isTypeAnnotated) { + classRequestMappingPathsCache.put(clazz, newPaths); } return newPaths; } -- Gitee From baba7807ab83330c9d3cf30de787bb15d93c0fa1 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 20 Apr 2025 11:48:34 +0800 Subject: [PATCH 39/43] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/environment/ModuleRequestMappingHandlerMapping.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java index 717e187f..b400161d 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -97,7 +97,7 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap } ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(clazz); if (moduleDefinition != null) { - String[] newPaths = doHandlePaths(moduleDefinition.getPropertiesPrefix(), paths); + String[] newPaths = addPrefixForPlaceholders(moduleDefinition.getPropertiesPrefix(), paths); if (isTypeAnnotated) { classRequestMappingPathsCache.put(clazz, newPaths); } @@ -109,7 +109,7 @@ public class ModuleRequestMappingHandlerMapping extends RequestMappingHandlerMap return paths; } - private String[] doHandlePaths(String propertiesPrefix, String[] paths) { + private String[] addPrefixForPlaceholders(String propertiesPrefix, String[] paths) { // 替换占位符 List pathList = new ArrayList<>(paths.length); for (String path : paths) { -- Gitee From c25d441e5e474b6566f438dc3e156b0c3020dc3e Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 20 Apr 2025 14:18:57 +0800 Subject: [PATCH 40/43] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/dorive/module/entity/ModuleDefinition.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java index 34072491..294867c7 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java @@ -52,6 +52,7 @@ public class ModuleDefinition { private List notifies; private List waits; private String tablePrefix; + private String requestPrefix; public ModuleDefinition(Resource resource, Manifest manifest) { Assert.notNull(resource, "The resource can not be null!"); @@ -78,6 +79,7 @@ public class ModuleDefinition { String notifies = mainAttributes.getValue("Dorive-Notifies"); String waits = mainAttributes.getValue("Dorive-Waits"); String tablePrefix = mainAttributes.getValue("Dorive-Table-Prefix"); + String requestPrefix = mainAttributes.getValue("Dorive-Request-Prefix"); this.originId = filterValue(originId); this.project = filterValue(project); @@ -97,6 +99,7 @@ public class ModuleDefinition { this.notifies = filterValues(notifies); this.waits = filterValues(waits); this.tablePrefix = filterValue(tablePrefix); + this.requestPrefix = filterValue(requestPrefix); } private String filterValue(String value) { @@ -207,7 +210,7 @@ public class ModuleDefinition { } public String getModulePathValue() { - return name + "/" + version; + return StringUtils.isNotBlank(requestPrefix) ? requestPrefix : name + "/" + version; } @Override -- Gitee From 7f3f3fd0a0f3a10aa2f472b9f5c2aefd86bc08a5 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 20 Apr 2025 15:25:04 +0800 Subject: [PATCH 41/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/dorive/module/entity/ModuleDefinition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java index 294867c7..64266b58 100644 --- a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java @@ -68,7 +68,7 @@ public class ModuleDefinition { String name = mainAttributes.getValue("Dorive-Module"); String version = mainAttributes.getValue("Dorive-Version"); - String type = mainAttributes.getValue("Dorive-Module-Type"); + String type = mainAttributes.getValue("Dorive-Type"); String tags = mainAttributes.getValue("Dorive-Tags"); String profiles = mainAttributes.getValue("Dorive-Profiles"); -- Gitee From 88ad24030b4831037249d69e08955964fe434823 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 20 Apr 2025 17:11:36 +0800 Subject: [PATCH 42/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index cd43fb59..a41cb5dc 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ dorive开发框架实现了模块化、模型化的全部特性,你可以有 com.gitee.digital-engine dorive-spring-boot-starter - 3.5.0.9 + 3.5.1 ``` @@ -104,6 +104,14 @@ dorive开发框架实现了模块化、模型化的全部特性,你可以有 | dorive-autoconfigure | 自动配置实现 | | | | dorive-spring-boot-starter | 启动器 | | | +### 🌿分支版本说明 + +例如:3.5.1(格式A.B.C) + +- A-架构版本:架构重构时增加,不保证兼容性。 +- B-特性版本:新特性引入时增加。 +- C-迭代版本:功能优化、bug修复时增加。 + ### 📝文档 wiki地址: @@ -116,30 +124,6 @@ wiki地址: - [Gitee issue](https://gitee.com/digital-engine/dorive/issues) -### 📘版本说明 - -| 版本 | 说明 | -| ---- | ------------------------------------------------------------ | -| 1.x | 试验领域驱动落地的可能性 | -| 2.x | 完成基本功能开发,并在项目中应用 | -| 3.x | 重新设计内部架构,并优化大量代码。自3.4.3.4版本开始,项目进入维护阶段 | - -### 🌿分支说明 - -| 分支 | 说明 | -| ------ | ------------------------------------------------------------ | -| master | 主分支,release版本使用的分支,不接收任何pr或修改 | -| 3.x | 版本分支,分支名即版本号,版本号高于master的,为正在开发的分支 | - -### 🤝与我(们)一起 - -1. 请将个人联系方式,发送邮件至digital_engine@163.com -2. 等待维护者向你发出邀请 - -### ⭐Star dorive - -[![Stargazers over time](https://starchart.cc/chentaoah/dorive.svg?variant=adaptive)](https://starchart.cc/chentaoah/dorive) - ### 🙏🏻特别感谢 - [hutool](https://gitee.com/dromara/hutool/tree/v5-master/) -- Gitee From 608c41e22e8ff18e681f989c015ea679840480f6 Mon Sep 17 00:00:00 2001 From: chentaoah <609580885@qq.com> Date: Sun, 20 Apr 2025 17:18:42 +0800 Subject: [PATCH 43/43] =?UTF-8?q?=E5=8F=91=E5=B8=833.5.1=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dorive-api/pom.xml | 2 +- dorive-autoconfigure/pom.xml | 2 +- dorive-core/pom.xml | 2 +- dorive-event/pom.xml | 2 +- dorive-module/pom.xml | 2 +- dorive-mybatis-plus/pom.xml | 2 +- dorive-query/pom.xml | 2 +- dorive-ref/pom.xml | 2 +- dorive-spring-boot-starter/pom.xml | 2 +- dorive-sql/pom.xml | 2 +- dorive-test/pom.xml | 2 +- dorive-web/pom.xml | 2 +- pom.xml | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dorive-api/pom.xml b/dorive-api/pom.xml index 784f68c1..8a4a7517 100644 --- a/dorive-api/pom.xml +++ b/dorive-api/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-api diff --git a/dorive-autoconfigure/pom.xml b/dorive-autoconfigure/pom.xml index c4fe8243..817b07c5 100644 --- a/dorive-autoconfigure/pom.xml +++ b/dorive-autoconfigure/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-autoconfigure diff --git a/dorive-core/pom.xml b/dorive-core/pom.xml index bea3103f..3e9dfaa1 100644 --- a/dorive-core/pom.xml +++ b/dorive-core/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-core diff --git a/dorive-event/pom.xml b/dorive-event/pom.xml index 532eb248..bbb0e760 100644 --- a/dorive-event/pom.xml +++ b/dorive-event/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-event diff --git a/dorive-module/pom.xml b/dorive-module/pom.xml index 2efbd86d..9f3b1b3a 100644 --- a/dorive-module/pom.xml +++ b/dorive-module/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-module diff --git a/dorive-mybatis-plus/pom.xml b/dorive-mybatis-plus/pom.xml index 4267b85a..abed11f1 100644 --- a/dorive-mybatis-plus/pom.xml +++ b/dorive-mybatis-plus/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-mybatis-plus diff --git a/dorive-query/pom.xml b/dorive-query/pom.xml index 064fcfa3..910a60b7 100644 --- a/dorive-query/pom.xml +++ b/dorive-query/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-query diff --git a/dorive-ref/pom.xml b/dorive-ref/pom.xml index b0a40cae..0242cc31 100644 --- a/dorive-ref/pom.xml +++ b/dorive-ref/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-ref diff --git a/dorive-spring-boot-starter/pom.xml b/dorive-spring-boot-starter/pom.xml index 89d3d579..ae4f8cbf 100644 --- a/dorive-spring-boot-starter/pom.xml +++ b/dorive-spring-boot-starter/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-spring-boot-starter diff --git a/dorive-sql/pom.xml b/dorive-sql/pom.xml index 64b7211a..63f68ca9 100644 --- a/dorive-sql/pom.xml +++ b/dorive-sql/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-sql diff --git a/dorive-test/pom.xml b/dorive-test/pom.xml index 7f93c87e..6173f98f 100644 --- a/dorive-test/pom.xml +++ b/dorive-test/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-test diff --git a/dorive-web/pom.xml b/dorive-web/pom.xml index 51edc6b4..d81c1bca 100644 --- a/dorive-web/pom.xml +++ b/dorive-web/pom.xml @@ -6,7 +6,7 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 dorive-web diff --git a/pom.xml b/pom.xml index 8a164955..f89ea1b4 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 pom -- Gitee