From cfcb11ae61e1ec22a7f0a27b5583e7691d1479e5 Mon Sep 17 00:00:00 2001 From: redkale Date: Wed, 4 Sep 2024 17:57:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0SourceType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/redkale/source/DataJdbcSource.java | 1 + .../java/org/redkale/source/SourceType.java | 34 +++++++++++++++++++ .../source/spi/SourceModuleEngine.java | 18 ++++++++-- 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/redkale/source/SourceType.java diff --git a/src/main/java/org/redkale/source/DataJdbcSource.java b/src/main/java/org/redkale/source/DataJdbcSource.java index 293186409..404510bd1 100644 --- a/src/main/java/org/redkale/source/DataJdbcSource.java +++ b/src/main/java/org/redkale/source/DataJdbcSource.java @@ -32,6 +32,7 @@ import org.redkale.util.*; @AutoLoad(false) @SuppressWarnings("unchecked") @ResourceType(DataSource.class) +@SourceType(DataJdbcSource.class) public class DataJdbcSource extends AbstractDataSqlSource { protected JdbcConnectionPool readPool; diff --git a/src/main/java/org/redkale/source/SourceType.java b/src/main/java/org/redkale/source/SourceType.java new file mode 100644 index 000000000..52be208db --- /dev/null +++ b/src/main/java/org/redkale/source/SourceType.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016-2116 Redkale + * All rights reserved. + */ +package org.redkale.source; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 显式的指明Source多个资源类型。 + * + *

详情见: https://redkale.org + * + * @author zhangjx + * @since 2.8.0 + */ +@Documented +@Target({TYPE}) +@Retention(RUNTIME) +@Repeatable(SourceType.SourceTypes.class) +public @interface SourceType { + + Class value(); + + @Documented + @Target({TYPE}) + @Retention(RUNTIME) + @interface SourceTypes { + + SourceType[] value(); + } +} diff --git a/src/main/java/org/redkale/source/spi/SourceModuleEngine.java b/src/main/java/org/redkale/source/spi/SourceModuleEngine.java index e29d93b35..c1dfdbf52 100644 --- a/src/main/java/org/redkale/source/spi/SourceModuleEngine.java +++ b/src/main/java/org/redkale/source/spi/SourceModuleEngine.java @@ -35,6 +35,7 @@ import org.redkale.source.DataSources; import org.redkale.source.DataSqlSource; import org.redkale.source.SearchSource; import org.redkale.source.SourceManager; +import org.redkale.source.SourceType; import org.redkale.util.AnyValue; import org.redkale.util.AnyValueWriter; import org.redkale.util.InstanceProvider; @@ -390,6 +391,11 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager { loadCacheSource(sourceConf.getValue(AbstractCacheSource.CACHE_SOURCE_RESOURCE), autoMemory); if (source != null) { resourceFactory.register(sourceName, CacheSource.class, source); + for (SourceType t : source.getClass().getAnnotationsByType(SourceType.class)) { + if (t.value() != CacheSource.class) { + resourceFactory.register(sourceName, t.value(), source); + } + } } return source; } @@ -403,6 +409,11 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager { cacheSources.add(source); resourceFactory.register(sourceName, CacheSource.class, source); + for (SourceType t : source.getClass().getAnnotationsByType(SourceType.class)) { + if (t.value() != CacheSource.class) { + resourceFactory.register(sourceName, t.value(), source); + } + } logger.info("Load CacheSource resourceName='" + sourceName + "', source=" + source + " in " + (System.currentTimeMillis() - st) + " ms"); return source; @@ -464,8 +475,10 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager { if (source instanceof DataSqlSource) { resourceFactory.register(sourceName, DataSqlSource.class, source); } - if (source instanceof DataJdbcSource) { - resourceFactory.register(sourceName, DataJdbcSource.class, source); + for (SourceType t : source.getClass().getAnnotationsByType(SourceType.class)) { + if (t.value() != DataSqlSource.class) { + resourceFactory.register(sourceName, t.value(), source); + } } } } @@ -536,5 +549,4 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager { ((AnyValueWriter) conf).setValue("name", sourceName); return conf; } - }