diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/DomainService.java b/flyfish-data/src/main/java/com/flyfish/framework/domain/base/DomainService.java new file mode 100644 index 0000000..53f4da1 --- /dev/null +++ b/flyfish-data/src/main/java/com/flyfish/framework/domain/base/DomainService.java @@ -0,0 +1,7 @@ +package com.flyfish.framework.domain.base; + +/** + * 占位,标记service + */ +public interface DomainService { +} diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/RestBean.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/RestBean.java index b0e8fc4..f880d5c 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/RestBean.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/RestBean.java @@ -1,15 +1,16 @@ package com.flyfish.framework.beans.meta; -import com.flyfish.framework.controller.reactive.ReactiveBaseController; import com.flyfish.framework.controller.SafeController; +import com.flyfish.framework.controller.reactive.ReactiveBaseController; +import com.flyfish.framework.domain.base.DomainService; import com.flyfish.framework.domain.base.NameLikeQo; import com.flyfish.framework.domain.base.Qo; import com.flyfish.framework.domain.base.Vo; import com.flyfish.framework.repository.DefaultReactiveRepository; -import com.flyfish.framework.service.BaseReactiveService; import com.flyfish.framework.service.impl.BaseReactiveServiceImpl; import org.springframework.core.annotation.AliasFor; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.repository.Repository; import java.lang.annotation.*; @@ -79,14 +80,14 @@ public @interface RestBean { * * @return 结果 */ - Class repoClass() default DefaultReactiveRepository.class; + Class repoClass() default DefaultReactiveRepository.class; /** * 服务类,动态生成服务 * * @return 结果 */ - Class serviceClass() default BaseReactiveServiceImpl.class; + Class serviceClass() default BaseReactiveServiceImpl.class; /** * controller的类,支持自定义 diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/resolver/DynamicRestBeanResolver.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/resolver/DynamicRestBeanResolver.java index 174bfda..e2ad200 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/resolver/DynamicRestBeanResolver.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/resolver/DynamicRestBeanResolver.java @@ -3,13 +3,11 @@ package com.flyfish.framework.beans.resolver; import com.flyfish.framework.compiler.DynamicJavaCompiler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.InitializingBean; import org.springframework.context.annotation.Lazy; -import org.springframework.web.reactive.result.method.AbstractHandlerMethodMapping; -import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping; -import java.lang.reflect.Method; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; /** * 动态Bean生成解析器 @@ -18,21 +16,9 @@ import java.util.*; */ @Slf4j @Lazy(false) -public class DynamicRestBeanResolver implements InitializingBean, DisposableBean { +public class DynamicRestBeanResolver implements DisposableBean { - private static final List controllers = new ArrayList<>(); private static final Map> classes = new HashMap<>(); - private final Method handlerRegister; - private final RequestMappingHandlerMapping mapping; - - public DynamicRestBeanResolver(RequestMappingHandlerMapping mapping) throws NoSuchMethodException { - this.mapping = mapping; - this.handlerRegister = AbstractHandlerMethodMapping.class.getDeclaredMethod("detectHandlerMethods", Object.class); - } - - public static void addController(String controller) { - controllers.add(controller); - } public static void register(String name, Class clazz) { classes.put(name, clazz); @@ -51,14 +37,4 @@ public class DynamicRestBeanResolver implements InitializingBean, DisposableBean log.info("正在销毁rest自动配置器"); DynamicJavaCompiler.delegate().close(); } - - @Override - public void afterPropertiesSet() throws Exception { - log.info("正在注册controller..."); - for (String bean : controllers) { - log.info("注册controller:{}", bean); - handlerRegister.setAccessible(true); - handlerRegister.invoke(mapping, bean); - } - } } diff --git a/flyfish-web/src/main/java/com/flyfish/framework/config/BeanConfig.java b/flyfish-web/src/main/java/com/flyfish/framework/config/BeanConfig.java index 9edb572..1469cec 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/config/BeanConfig.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/config/BeanConfig.java @@ -4,11 +4,8 @@ import com.flyfish.framework.beans.resolver.DynamicRestBeanResolver; import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.context.annotation.Bean; import org.springframework.http.server.reactive.ServerHttpRequest; -import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping; import org.springframework.web.server.WebFilter; -import java.util.ArrayList; - /** * 默认初始化的Bean配置 * @@ -39,9 +36,8 @@ public class BeanConfig { @Bean - public DynamicRestBeanResolver dynamicRestBeanResolver(RequestMappingHandlerMapping requestMappingHandlerMapping) - throws NoSuchMethodException { - return new DynamicRestBeanResolver(requestMappingHandlerMapping); + public DynamicRestBeanResolver dynamicRestBeanResolver() { + return new DynamicRestBeanResolver(); } } diff --git a/flyfish-web/src/main/java/com/flyfish/framework/config/RestBeanAutoConfigure.java b/flyfish-web/src/main/java/com/flyfish/framework/config/RestBeanAutoConfigure.java index a2fee7b..65ce94c 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/config/RestBeanAutoConfigure.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/config/RestBeanAutoConfigure.java @@ -104,11 +104,12 @@ public class RestBeanAutoConfigure implements ImportBeanDefinitionRegistrar, Res .setUri(makePath(clazz.getSimpleName(), restBean.value())); // 分别生成实现类,从repo到controller templates.forEach((type, template) -> { + Class superClass = superClasses.getOrDefault(type, noOp).apply(restBean); // 当且仅当存在vo时,才编译view-controller - if (testNotSupport(clazz, type, hasVo)) { + if (testNotSupport(superClass, type, hasVo)) { return; } - source.setSuperClass(superClasses.getOrDefault(type, noOp).apply(restBean).getCanonicalName()); + source.setSuperClass(superClass.getCanonicalName()); source.setClassName(clazz.getSimpleName() + type.getName()); try { log.info("尝试注册{}", source.getClassName()); @@ -151,10 +152,6 @@ public class RestBeanAutoConfigure implements ImportBeanDefinitionRegistrar, Res String beanName = StringUtils.uncapitalize(clazz.getSimpleName()); log.info("注册bean:{}", beanName); registry.registerBeanDefinition(beanName, builder.getBeanDefinition()); - // 如果是controller,注册 - if (clazz.getSimpleName().endsWith("Controller")) { - DynamicRestBeanResolver.addController(beanName); - } } /** @@ -199,7 +196,7 @@ public class RestBeanAutoConfigure implements ImportBeanDefinitionRegistrar, Res /** * 测试是否支持vo * - * @param clazz 类 + * @param clazz 父类 * @param type 注入类型 * @param hasVo 是否有vo * @return 结果 diff --git a/flyfish-web/src/main/java/com/flyfish/framework/service/BaseReactiveService.java b/flyfish-web/src/main/java/com/flyfish/framework/service/BaseReactiveService.java index 2fc3977..fbcf4f8 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/service/BaseReactiveService.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/service/BaseReactiveService.java @@ -2,6 +2,7 @@ package com.flyfish.framework.service; import com.flyfish.framework.bean.SyncVo; import com.flyfish.framework.domain.base.Domain; +import com.flyfish.framework.domain.base.DomainService; import com.flyfish.framework.domain.base.Qo; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -16,7 +17,7 @@ import java.util.List; * * @author wybab */ -public interface BaseReactiveService { +public interface BaseReactiveService extends DomainService { /** * 查询 diff --git a/flyfish-web/src/main/java/com/flyfish/framework/service/BaseService.java b/flyfish-web/src/main/java/com/flyfish/framework/service/BaseService.java index 3986aec..e02b42b 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/service/BaseService.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/service/BaseService.java @@ -2,6 +2,7 @@ package com.flyfish.framework.service; import com.flyfish.framework.bean.SyncVo; import com.flyfish.framework.domain.base.Domain; +import com.flyfish.framework.domain.base.DomainService; import com.flyfish.framework.domain.base.Qo; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -16,7 +17,7 @@ import java.util.Optional; * * @param 实体泛型 */ -public interface BaseService { +public interface BaseService extends DomainService { /** * 查询