diff --git a/README.md b/README.md index 4ffc6f6f3e53bfa782a6323b60cd3b3237e5a5b0..a41cb5dc47279cd04e1e627a2bfa64e85df25925 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,34 @@ dorive开发框架实现了模块化、模型化的全部特性,你可以有 com.gitee.digital-engine dorive-spring-boot-starter - 3.5.0.8 + 3.5.1 ``` 如果是存量项目,你还需要考虑兼容性: -| 所属 | 模块 | 说明 | 适配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 | 启动器 | | | + +### 🌿分支版本说明 + +例如:3.5.1(格式A.B.C) + +- A-架构版本:架构重构时增加,不保证兼容性。 +- B-特性版本:新特性引入时增加。 +- C-迭代版本:功能优化、bug修复时增加。 ### 📝文档 @@ -113,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/) diff --git a/doc/img/entity.png b/doc/img/entity.png deleted file mode 100644 index 1e46932e339e50efd4d4679cb2767c866ff43564..0000000000000000000000000000000000000000 Binary files a/doc/img/entity.png and /dev/null differ diff --git a/doc/img/logic.png b/doc/img/logic.png new file mode 100644 index 0000000000000000000000000000000000000000..7c10d2fb6979acce904044f6e17e440d97417e0b Binary files /dev/null and b/doc/img/logic.png differ diff --git a/doc/img/physical.png b/doc/img/physical.png new file mode 100644 index 0000000000000000000000000000000000000000..d43c96b57af9cd8bb23877d3e064ab3b637af66c Binary files /dev/null and b/doc/img/physical.png differ diff --git a/dorive-api/pom.xml b/dorive-api/pom.xml index 784f68c1fa3c5f6dca0b0bbd56512c6dfcb70a44..8a4a7517922bfdf59fa941bd7258c5a502f602a6 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-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 1af14a2127ee19aaed5a6baa2ce7fd52824fa6c3..f93f05156c86600e2c23ae1a25ebd9e6140c9cf2 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/api/BoundedContextAware.java b/dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java new file mode 100644 index 0000000000000000000000000000000000000000..0433a048e1060050a2c792cc91a5f6490aa5e6e1 --- /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.BoundedContext; + +public interface BoundedContextAware { + + void setBoundedContext(BoundedContext boundedContext); + +} 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/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/BoundedContext.java index 0f677031e5cf797364a14d2f450c9d13f0c102fb..d770c46d60c09fe1f982da7a93c0409f9576b1e5 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/BoundedContext.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.gitee.dorive.core.entity.common; +package com.gitee.dorive.api.entity; import lombok.NoArgsConstructor; 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 f2b3090101bb62a52c4d933df8daf00d797b311c..60eb250048920edf7b98336ce8e16309e3143dfb 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-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 9c7379d68198724ff3a1c292c84a973cf5a862eb..1a8cbe698f2bce6fd6d09e7d5cbf25cd11b4a93e 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 d47641b0447e0bd0f090990635c0d9d94e13c4ac..159f5ebd4845334e7efa84c19bd09fbee7754b78 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 95% 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 127e52feda21c99ae313c7e25b7a3ffb13185ccc..2b121bf5e605e063ff85f2d4616da47da8556039 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; @@ -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-autoconfigure/pom.xml b/dorive-autoconfigure/pom.xml index c4fe8243d551b5be37f218a0b30081f2fcd971cc..817b07c5de1e39956aa106eb367ac5be5b89493f 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-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 f88d29e41f94e7de131d27de5452a1c1ce2fd245..2d50540a2b6699f7ed42c0dde17adbac410c44e3 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,22 +17,50 @@ 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.environment.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 @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() { + return new BoundedContextBeanPostProcessor(); + } + @Bean("moduleAutowiredBeanPostProcessorV3") @ConditionalOnMissingClass public static ModuleAutowiredBeanPostProcessor moduleAutowiredBeanPostProcessor() { return new ModuleAutowiredBeanPostProcessor(); } + @Bean("moduleWebMvcRegistrationsV3") + @ConditionalOnMissingClass + public static WebMvcRegistrations moduleWebMvcRegistrations() { + return new WebMvcRegistrations() { + @Override + public RequestMappingHandlerMapping getRequestMappingHandlerMapping() { + return new ModuleRequestMappingHandlerMapping(); + } + }; + } + } 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 4c797147a00d5efaec952e2fce5d319efb18e8cb..a38f4fd3e289f60bd0aa73fb3dc26895a985eeb6 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-core/pom.xml b/dorive-core/pom.xml index bea3103f21521e6b887a1e0c3bb581c8dec84c51..3e9dfaa152e75c539ca5ab0af7aa1d1630b54b02 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-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 ac5ededda5133905b8c1e5f3b568363685ac45e1..840f58f68e09f2519cd2f7c112efc39b2c390d3b 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,9 +18,9 @@ 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.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; @@ -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/entity/executor/Criterion.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Criterion.java index ff13143d8d58dc084b75110fe408085a66e4853d..b54d6f60e6353cf4b6d4832cf71cbdb6bc9936ef 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 50e08f38ec1ece4bebbaaa2790fdf7990959c9dc..736c75ac71139414cc7a36d91bebb3ca3ead1457 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/context/AdaptiveMatcher.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/context/AdaptiveMatcher.java index 1b3ceab8840ce77d92c094ebfa5d00bc46abdddd..0d8cb89ead102a65fde124a33d3173d47383f8fe 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 8b2f7314f55a1bbe4b1269dbc231b205af378c76..51cf00746a7b9c9a2c4813d5322456c76589656e 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 1f41721a7877e09d5f912970c79909bc1624839e..fbea3dd20412cbac739e06dc5b384b3c93663d19 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/factory/DefaultEntityFactory.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java index 7a2b22959eb539090d1b2ff4c4a11e4d12412b43..5367f246115df234bd2b36addeb404913c8c3d99 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.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/impl/handler/AdaptiveEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/AdaptiveEntityHandler.java index 5c4b8783cf5b6e7a03de6258b4cda49e3ca95f91..bc9e363b6a98b22d1ac5d957108956c5e649520a 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 a0499b3b97aa658bff7eb4be845595611f709886..78973cc9429f12800b0a9cc07c8af1a05df74fcd 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 691830733265fce9a972f09830df09121cf7d9b6..e1b4d6ca27a98774dc74003ebfe11573800876e1 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 15cecd5da896d8e4515d2be229cb92733e46707e..9e57373a40f8b6f67cbfad15f37fe01c8ad25ee1 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 66d8df0078b1e1db22e64777679a57402633442a..082362688fafaff6c76433301649f2b43fff9957 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 f611f9a549113844fed7d14421964a44e17c3a6c..9e33012f821527b96f2bde0253b83725c83adaf4 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,9 +27,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.AbstractContextRepository; -import com.gitee.dorive.core.repository.CommonRepository; -import com.gitee.dorive.core.util.CollectionUtils; +import com.gitee.dorive.core.impl.repository.AbstractContextRepository; +import com.gitee.dorive.core.impl.repository.CommonRepository; +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/eo/DelegatedEntityOpHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/eo/DelegatedEntityOpHandler.java index 3ce12301659988fe25e5a14cbb9fe15868db1cc0..96f920f5715490721c5afad79511120b0b756b9c 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 0d5d662291054e700739d51d05e3be1e3695c6ca..871b32de076a7646770225e679c89d7bfb437a97 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 8871eafc72e3e9203ae38adc6af79058c99915ad..e6ff738622e28483c5df2f1760cd44dbd92666c9 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,8 +23,8 @@ 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.util.MultiInBuilder; +import com.gitee.dorive.core.impl.repository.CommonRepository; +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/handler/joiner/SingleEntityHandler.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/handler/joiner/SingleEntityHandler.java index e6a80c8fa558298cace0a694ca01b9f69738d2f2..4a1a6e6b00620cdea6e566e948e2a721bdd5f320 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 3f3167e04c4d72509b5119ae95492574b6e1f998..34fd525cce44b20abdf910773f358b6060a7fe1f 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 91% 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 ec30eac7d85d7342bd04cd25f93823a3dff529f7..8ddee9c5074ac2e4cecbcb1c3c8111d38aed8113 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,10 +15,11 @@ * 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; +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; @@ -27,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; @@ -35,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.core.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; @@ -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,13 +84,19 @@ 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(); - Class entityClass = ReflectUtils.getFirstArgumentType(repositoryClass); + Class entityClass = ReflectUtils.getFirstTypeArgument(repositoryClass); 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 = (BoundedContext) applicationContext.getBean(boundedContextName); - defaultEntityFactory.setBoundedContext(boundedContext); - } - } + defaultEntityFactory.setBoundedContextName(repositoryDef.getBoundedContext()); + defaultEntityFactory.setBoundedContext(boundedContext); } return entityFactory; } 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 97% 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 ece29829ed2787c4ff0d39f210a9c4164cc3fe30..858174babdba496b764d22fb176f4f35a86f0dae 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; @@ -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/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 1bdf7abb92979b8e83174b281a1347b59fee41b2..a1c8dd99fc369c8a695e912c82a299b8ea5ec2b3 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 75e213632b0291d2d10fc961649a6b0be4c6245e..ff105e682d9c182438a2a50c5c958c870518a83f 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 98% 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 0b2c8462ebec24d353ebca6f04e88684fb26e2ae..11f463df1d23e8191a6998072ef77dc6a4ec95d6 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; @@ -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/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 4c3554bd0f5dd501bd1192a5e2616c27855e1602..b95091ad0e891f0b2d39718ecec8ddc39e5283f1 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 aef5f22a7fc4f1e74188e1b37bc27442333620ad..ad0b9bdcbbfcb4b95310a18bcf89cd60e7f61098 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 e4d5c214bf63ce620aef4d4c2671ba6f913af73e..1f52319b68000ccee2dc174b91e8c330c1c369a9 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-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 ca16d4b508115f00680f5062f34b798edfbfd95b..2792159bb532d16b81fe579ed9fd88bb7d599970 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 286b514c6fa7783e4f43dfb232896cc6ac268fa1..1afc0b9054b820334e4272e1f3eb5ce1898a4c85 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 67c97e2013a560697497f7c81828bf42f0d6f5bd..a12a54698a92333a6517b6fa54823b10223a3f14 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 9bfc4e4739aca9fa6ac2c25059ae6e8adf50bc34..888369d47e597daae6733dcaf5c2c2d5843e7b23 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 e50a346bf1acfe011a012aff09aa801b2c65eaca..2380d6e9f441fd781be22647219cf120b3bb6079 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-event/pom.xml b/dorive-event/pom.xml index 532eb2480df3c1489f94a232eba33142c92f0e7d..bbb0e760b653b3696b8a07d012748c8509cad0ef 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-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 94% 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 58205acedbfd2d959f7087c6d22c1527d5dde4ac..f93d374f2306efadad7460b0318cb20b7736fadc 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; @@ -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-module/pom.xml b/dorive-module/pom.xml index 448dfb92a3de1a1e0bd5a626b88989fd06276c49..9f3b1b3acbe48fb39187fc0ccfceaf6ba5d6535b 100644 --- a/dorive-module/pom.xml +++ b/dorive-module/pom.xml @@ -6,25 +6,18 @@ com.gitee.digital-engine dorive - 3.5.0.8 + 3.5.1 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/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 5a15a9f907742b52d3a7dfbbcb15c36e50f26c0d..02c6cc25f28990179fdf9ebe2acac1d64bc70de3 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.ModuleBeanDescriptor; +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, ModuleBeanDescriptor beanDescriptor, Map exposedCandidates); } 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 ffef6d7e64a6b5b75df1f4a1bfd5f1cc0bb3e769..287766981e66e0c39994178d8d842a4999ba047c 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/entity/ModuleBeanDescriptor.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleBeanDescriptor.java new file mode 100644 index 0000000000000000000000000000000000000000..c8aff30a091e179f62e9bf929425e30055536843 --- /dev/null +++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleBeanDescriptor.java @@ -0,0 +1,33 @@ +/* + * 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; +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/entity/ModuleDefinition.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java index b0974e1105803cd1c92efe9b37c46934a4b45ffe..64266b5821783944e15b8e31d6124e3a07cf85ca 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,14 +43,16 @@ public class ModuleDefinition { private String name; private String version; private String type; + private List tags; private List profiles; private List configs; private List exports; private List requires; private List provides; - private List publishes; - private List consumes; + 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!"); @@ -66,16 +68,18 @@ 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"); String configs = mainAttributes.getValue("Dorive-Configs"); 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"); + String requestPrefix = mainAttributes.getValue("Dorive-Request-Prefix"); this.originId = filterValue(originId); this.project = filterValue(project); @@ -85,15 +89,17 @@ 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); 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); + this.requestPrefix = filterValue(requestPrefix); } private String filterValue(String value) { @@ -125,6 +131,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)) { @@ -183,4 +200,27 @@ public class ModuleDefinition { } return 2; } + + public String getPropertiesPrefix() { + return name + "." + version + "."; + } + + public String getModulePathKey() { + return name + "." + version + ".module_path"; + } + + public String getModulePathValue() { + return StringUtils.isNotBlank(requestPrefix) ? requestPrefix : name + "/" + version; + } + + @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); + } } 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 5481f0b27491b3bc261bbcbf65c9cf7ab8bf40e2..676896fb4720937cb7a5190558bbc8dd542517fe 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/environment/ModuleContextAnnotationAutowireCandidateResolver.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleContextAnnotationAutowireCandidateResolver.java index 2763bce622bf24f41c8aa8559d6359acd425ca33..e6f333e582f1f827644f8062512e3ebbedcf5913 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,11 +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 strValue = (String) value; if (strValue.startsWith("${") && strValue.endsWith("}")) { strValue = StrUtil.removePrefix(strValue, "${"); - return "${" + name + "." + 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 465c93c82d7362b237cb7dcc18808e95e5097f4e..844ffd567d76fb315ff06de9607f461ed7cf0654 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,9 +59,8 @@ public class ModuleEnvironmentPostProcessor implements EnvironmentPostProcessor, if (source instanceof Map) { Map map = (Map) source; if (!map.isEmpty()) { - String moduleName = moduleDefinition.getName(); Map newMap = new LinkedHashMap<>(); - map.forEach((key, value) -> newMap.put(moduleName + "." + 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 new file mode 100644 index 0000000000000000000000000000000000000000..b400161dc6c54a862656739a257b85894490d46d --- /dev/null +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/environment/ModuleRequestMappingHandlerMapping.java @@ -0,0 +1,126 @@ +/* + * 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; +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 lombok.Getter; +import lombok.Setter; +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.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( + 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 (paths == null || paths.length == 0) { + return paths; + } + if (paths.length == 1 && !paths[0].contains("$")) { + return 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(); + Class clazz = null; + boolean isTypeAnnotated = false; + if (source instanceof Class) { + clazz = (Class) source; + isTypeAnnotated = true; + + } else if (source instanceof Method) { + clazz = ((Method) source).getDeclaringClass(); + } + if (clazz != null && moduleParser.isUnderScanPackage(clazz.getName())) { + if (isTypeAnnotated) { + String[] existPaths = classRequestMappingPathsCache.get(clazz); + if (existPaths != null) { + return existPaths; + } + } + ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(clazz); + if (moduleDefinition != null) { + String[] newPaths = addPrefixForPlaceholders(moduleDefinition.getPropertiesPrefix(), paths); + if (isTypeAnnotated) { + classRequestMappingPathsCache.put(clazz, newPaths); + } + return newPaths; + } + } + } + } + return paths; + } + + private String[] addPrefixForPlaceholders(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$$", "}"); + } + pathList.add(path); + } + return pathList.toArray(new String[0]); + } + +} 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 ed87af7e90a302f5cd612a4698b69b068d3cff5f..e0ce0657fc016f39f1b88c775967e0b8514bf35d 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 @@ -20,12 +20,14 @@ package com.gitee.dorive.module.impl.factory; import cn.hutool.core.util.ClassUtil; 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.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 com.gitee.dorive.module.impl.util.SpringClassUtils; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; @@ -35,11 +37,14 @@ 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.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -50,6 +55,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() { // 实例化策略 @@ -60,7 +66,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); @@ -96,46 +102,80 @@ 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); + 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(targetDeclaringClass)) { // 2、其他模块对外公开 + ModuleBeanDescriptor beanDescriptor = new ModuleBeanDescriptor(moduleDefinition, beanName, null, declaringClass); + Map exposedCandidates = new HashMap<>(2); + exposedCandidates.put(candidateBeanName, new ModuleBeanDescriptor(targetModuleDefinition, candidateBeanName, targetDeclaringClass, targetClass)); + // 过滤 + invokeExposedBeanFilters(descriptor, beanDescriptor, 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, "declaringClass"); + Class declaringClass = getDeclaringClass(descriptor); if (moduleParser.isUnderScanPackage(declaringClass.getName())) { ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(declaringClass); if (moduleDefinition != null) { List candidateBeanNames = new ArrayList<>(candidates.size()); - List exposedCandidateBeanNames = new ArrayList<>(candidates.size()); + ModuleBeanDescriptor beanDescriptor = new ModuleBeanDescriptor(moduleDefinition, null, null, declaringClass); + 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); - } - if (moduleParser.isUnderScanPackage(targetClass.getName())) { - ModuleDefinition targetModuleDefinition = moduleParser.findModuleDefinition(targetClass); - // 1、相同模块 - // 2、模块内对外公开 - if (moduleDefinition.equals(targetModuleDefinition)) { + Class targetClass = getTargetClass(candidates, candidateBeanName); + 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)) { - exposedCandidateBeanNames.add(candidateBeanName); + } else if (targetModuleDefinition.isExposed(targetDeclaringClass)) { // 2、其他模块对外公开 + exposedCandidates.put(candidateBeanName, new ModuleBeanDescriptor(targetModuleDefinition, candidateBeanName, targetDeclaringClass, targetClass)); } } } + + // 1、相同模块 if (candidateBeanNames.size() == 1) { return candidateBeanNames.get(0); } - if (candidateBeanNames.isEmpty() && exposedCandidateBeanNames.size() == 1) { - return exposedCandidateBeanNames.get(0); + // 2、其他模块对外公开 + if (candidateBeanNames.isEmpty()) { + // 过滤 + invokeExposedBeanFilters(descriptor, beanDescriptor, exposedCandidates); + if (exposedCandidates.size() == 1) { + return exposedCandidates.keySet().iterator().next(); + } } } } @@ -143,4 +183,46 @@ 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) { + 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(); + return ClassUtil.loadClass(className); + } + return targetClass; + } + + private void invokeExposedBeanFilters(DependencyDescriptor descriptor, ModuleBeanDescriptor beanDescriptor, 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, 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 new file mode 100644 index 0000000000000000000000000000000000000000..8c968db0498cdb92b246725a1252fc066e779409 --- /dev/null +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java @@ -0,0 +1,47 @@ +/* + * 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.ModuleBeanDescriptor; +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, 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"; + ModuleBeanDescriptor existModuleBeanDescriptor = exposedCandidates.get(boundedContextName); + // 清空 + exposedCandidates.clear(); + // 保留符合条件的 + if (existModuleBeanDescriptor != null) { + exposedCandidates.put(boundedContextName, existModuleBeanDescriptor); + } + } + } + +} 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 0000000000000000000000000000000000000000..275e390e543368ac45fc3c329ee60369ca8be5e5 --- /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.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; + } + +} 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 3d02f16dcbb2a34e2560fe66a474180c515c5b12..8c042ff8d7a0be758d9a4ac0e49744375400ad35 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/AbstractModuleParser.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java index 59615633f5299a0a4e97f425ce6a1ba8a216dd1d..f14fb0dbf128d0fd6a519c874238a375593d4e4d 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()) { @@ -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)); } } 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 c4953ff44cc46b94116406587a2c79afad3269da..9ba1e79984ab90fcf3704982a35ede8b472e3a2c 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,18 +19,18 @@ 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 { 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 = 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 7bcc3acb1639d18f38e1a27071f90ee804f99951..9eb59552db6d37837fa1fd73a49efe7a8523a86d 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 cacccf9193ed6b710dda243d55cf075a8385eb68..d2b08778b1cd8dd3a55d11e4674a48a880dbf734 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/PlaceholderUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/PlaceholderUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..f345eb616bbad78c80b193c3088e154cd9858a04 --- /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 new file mode 100644 index 0000000000000000000000000000000000000000..301a875c033fb41a8794adb1d05eb5a25f165c72 --- /dev/null +++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/SpringClassUtils.java @@ -0,0 +1,54 @@ +/* + * 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; + +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; + } + + 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; + } + + public static boolean isSynthesizedMergedAnnotationInvocationHandler(InvocationHandler invocationHandler) { + return invocationHandler != null && invocationHandler.getClass() == SYNTHESIZED_MERGED_ANNOTATION_INVOCATION_HANDLER; + } +} diff --git a/dorive-mybatis-plus/pom.xml b/dorive-mybatis-plus/pom.xml index 4267b85a699702b6673dc01c192bad1d3f1c6837..abed11f1be972ca8dbcd726102423b1ad30764b3 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-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 f90551a45357a837dc4cbab61bbf572051c7b23c..941f9010f1e8cbda0baad2fd6f92bfc09d3743da 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/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 08fc929fa3d98afa19d3008c0c2e4a6c83c50253..2a4b195d28def170eb1c8467e838ce5c1b88e16d 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 1341521ddefb299e5e6d34a6d5ae08949dc3856f..53a886819a08a31f9d63c7f1669f87abf3432803 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 9b5754fa369f76c3f0aff3b850666ea8e7f77e0e..a267ae1b5387a0d7e85951217a10f98d8f9f631c 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-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 e1fe8f1dcbf29643f33696ebd9b35cc72d06de78..329b66f7a75e7e6b0ab9182b6fbf9ab85e12a581 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/pom.xml b/dorive-query/pom.xml index 064fcfa3391ebb2de212fa4f8abaf4bb32259674..910a60b7aed5ab6cebbceb256489e40d201acc14 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-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 02dabfc60bb0c92926feef4e4a7bd705c7672a77..68f6056e65e4de5bfc6ad57d7620fd7460c2d713 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/entity/QueryConfig.java b/dorive-query/src/main/java/com/gitee/dorive/query/entity/QueryConfig.java index 29aa2276bba92bd2dcc417f0bc3f977b4d31f0b5..4eb22cd1c18ec415dd70ddf49d6bbbefb3ebf3f1 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 40b34a5982d40f7c7b0d913fce63e95ac1d90e95..b30154b1150477284936fe351bf49db74962792a 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 98b1ab2bb986c7a103227db9cf2a5220c4f709f6..d3e6df6630cf2989596767ec80776de64fd8be72 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/impl/handler/StepwiseQueryHandler.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/handler/StepwiseQueryHandler.java index 8b0d01564b845cfeb4304ebc05b1417d67c59e8b..0eb49465590e8a3203a7ebb7f3f4235dd7ade058 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,8 +23,8 @@ 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.util.MultiInBuilder; +import com.gitee.dorive.core.impl.repository.CommonRepository; +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/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 d92456eefb7f450da5cb41a5cefc45ca3377d7b5..86aa8a7484bb4e57162500b61cbac5757a42ce4d 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 09cd01bb8bae890936889e3a089671929c1c4ac2..33ded1f87e217351d25f87d4c9ccbf15ebd09552 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,12 +20,12 @@ 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 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/QueryExampleResolver.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryExampleResolver.java index 141fe5eae04540dfb77cd9e8dc3759c86d22ba8c..64fec98320d055d7a13bdc5b47adca172b7b4db7 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-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 2971770222d9e7ccb3ea5768e804be30e9b549ab..1b60634c36c2901473b265dd0aa6204673f893bc 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,10 +23,10 @@ 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; +import com.gitee.dorive.query.impl.repository.AbstractQueryRepository; import lombok.Data; import java.util.*; diff --git a/dorive-ref/pom.xml b/dorive-ref/pom.xml index b0a40caeda139e930b5f0502b08535b813a274f6..0242cc312305e7287b6a528dd312aa848e77463c 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-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 746fc2a275fb988b8d84a227722d331ef013e93e..06c613156cbc65b64f81949e5f2ce4bab0046080 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/injector/RefImpl.java similarity index 94% 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 4decd685f4f63df35952f3fd993c30b0c5e06580..835efc320adbea27ee5da27e5d34cee05b27f782 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,15 +15,15 @@ * 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; 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; +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/injector/RefInjector.java similarity index 95% 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 b95b86b59cb907367cb1756fc3740db6b94cbf75..7eb3b4845eb0f7211293c106ab86d5e422ce9979 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,12 +15,12 @@ * 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; 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/impl/RefObjImpl.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/injector/RefObjImpl.java similarity index 95% 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 1d7a4c73c5f1eadd37b1ebc846157b3cb1e60436..ff89241bcab9b9800d8d964c29cec429c04c9d29 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,13 +15,13 @@ * 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; 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-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 97% 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 48babf71a4c0923d24d0a563a0eb3023c1951e8c..fc3f12effe3864175c61990e088d6095b7a36292 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; @@ -23,8 +23,8 @@ 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.query.repository.AbstractQueryRepository; +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/repository/AbstractRefRepository.java b/dorive-ref/src/main/java/com/gitee/dorive/ref/impl/repository/AbstractRefRepository.java similarity index 92% 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 6ac49ba22e4fc7135576362e15eb9af037d15502..99be48c887fbdf818ebda20dd3830ab71bfc9cff 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,10 +15,10 @@ * 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; +import com.gitee.dorive.ref.impl.injector.RefInjector; public abstract class AbstractRefRepository extends AbstractInnerRepository { diff --git a/dorive-spring-boot-starter/pom.xml b/dorive-spring-boot-starter/pom.xml index 89d3d57956fc6d969fc6f0e4e9d707c0d970431f..ae4f8cbfbcdd1fe53cd7f0e492c1a32270a03411 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 64b7211a43666722207f76ca93d4dc3359808353..63f68ca91d0bf863ff31b7e26fb0962ce4b45353 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-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 fe7e3b96b8ed1fe443edb159610818c77a1aabe1..168a01f071ea90a2b2049f3e8c8cc987250dad93 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 7f705bea67b7d24697b6aecf4a75512a726c2e2a..046a3546f75deae6b5c33d971af5b6bec4eeb041 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 34b62d47a39d71a4a83cb32bb5a8beb6a8877ddd..d1f8be6c4b6e25fa0f2261d9e3c58302d18a5bda 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 eb9ed45203994fbd265b711042fa02a09f54ab4d..194011afe6372d6d5e2f14e1ac68a07821380e2e 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 1f86e7b993a4d0dce3b1d27609457ae5c5cd1276..aae9745e024f5971e2ec7762054e5940ad523d0b 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,13 +26,13 @@ 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.util.CriterionUtils; +import com.gitee.dorive.core.impl.repository.CommonRepository; +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; 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-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 c7b9b7eb6c5359b4a724fe8bd0510a1d88e7d67f..9c1dc55500b9d01b1fc54da8cfccbe75321d133f 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; diff --git a/dorive-test/pom.xml b/dorive-test/pom.xml index 7f93c87eef8d0293e3d04d56ad9ee27fb62f0d4b..6173f98fb2c6640981d5bcf9f890242c7aee881d 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 51edc6b4adea87f123449544b6d2f3db65e4d310..d81c1bca1686ee6eefbd7dc6b117592a345582cb 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/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 0000000000000000000000000000000000000000..b2bedcbbabc18e82f134ff48f95dc9099e056b3b --- /dev/null +++ b/dorive-web/src/main/java/com/gitee/dorive/web/impl/service/BaseService.java @@ -0,0 +1,94 @@ +/* + * 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.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; +import com.gitee.dorive.query.impl.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 entityClass = ReflectUtils.getFirstTypeArgument(getClass()); + Class repositoryClass = RepositoryContext.findRepositoryClass(entityClass); + 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(); + } + +} diff --git a/pom.xml b/pom.xml index e96ce27f7b1c78bbf79e374eb4fc89bf6a65858a..f89ea1b42b959022c1d91f197c6c6829be6080f3 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 @@ -29,9 +29,9 @@ + dorive-api dorive-module dorive-test - dorive-api dorive-core dorive-event dorive-query