This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 9bf2e447a01 Add RuleChangedItemType (#34840)
9bf2e447a01 is described below

commit 9bf2e447a0133b2f0508d4a9d4e01e8c06d15f60
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Mar 2 19:53:33 2025 +0800

    Add RuleChangedItemType (#34840)
    
    * Refactor RuleItemAlteredBuildExecutor
    
    * Add RuleChangedItemType
    
    * Add RuleChangedItemType
---
 .../rule/changed/BroadcastTableChangedProcessor.java         |  5 +++--
 .../rule/changed/BroadcastTableChangedProcessorTest.java     |  3 ++-
 .../encrypt/rule/changed/EncryptTableChangedProcessor.java   |  5 +++--
 .../encrypt/rule/changed/EncryptorChangedProcessor.java      |  5 +++--
 .../rule/changed/EncryptTableChangedProcessorTest.java       |  3 ++-
 .../encrypt/rule/changed/EncryptorChangedProcessorTest.java  |  3 ++-
 .../mask/rule/changed/MaskAlgorithmChangedProcessor.java     |  5 +++--
 .../mask/rule/changed/MaskTableChangedProcessor.java         |  5 +++--
 .../mask/rule/changed/MaskAlgorithmChangedProcessorTest.java |  3 ++-
 .../mask/rule/changed/MaskTableChangedProcessorTest.java     |  3 ++-
 .../ReadwriteSplittingDataSourceChangedProcessor.java        |  5 +++--
 .../ReadwriteSplittingLoadBalancerChangedProcessor.java      |  5 +++--
 .../ReadwriteSplittingDataSourceChangedProcessorTest.java    |  3 ++-
 .../ReadwriteSplittingLoadBalancerChangedProcessorTest.java  |  3 ++-
 .../changed/DefaultShadowAlgorithmNameChangedProcessor.java  |  5 +++--
 .../shadow/rule/changed/ShadowAlgorithmChangedProcessor.java |  5 +++--
 .../rule/changed/ShadowDataSourceChangedProcessor.java       |  5 +++--
 .../shadow/rule/changed/ShadowTableChangedProcessor.java     |  5 +++--
 .../DefaultShadowAlgorithmNameChangedProcessorTest.java      |  3 ++-
 .../rule/changed/ShadowAlgorithmChangedProcessorTest.java    |  3 ++-
 .../rule/changed/ShadowDataSourceChangedProcessorTest.java   |  3 ++-
 .../shadow/rule/changed/ShadowTableChangedProcessorTest.java |  3 ++-
 .../DefaultDatabaseShardingStrategyChangedProcessor.java     |  5 +++--
 .../changed/DefaultKeyGenerateStrategyChangedProcessor.java  |  5 +++--
 .../DefaultShardingAuditorStrategyChangedProcessor.java      |  5 +++--
 .../rule/changed/DefaultShardingColumnChangedProcessor.java  |  5 +++--
 .../DefaultTableShardingStrategyChangedProcessor.java        |  5 +++--
 .../sharding/rule/changed/KeyGeneratorChangedProcessor.java  |  5 +++--
 .../rule/changed/ShardingAlgorithmChangedProcessor.java      |  5 +++--
 .../rule/changed/ShardingAuditorChangedProcessor.java        |  5 +++--
 .../rule/changed/ShardingAutoTableChangedProcessor.java      |  5 +++--
 .../sharding/rule/changed/ShardingCacheChangedProcessor.java |  5 +++--
 .../sharding/rule/changed/ShardingTableChangedProcessor.java |  5 +++--
 .../rule/changed/ShardingTableReferenceChangedProcessor.java |  5 +++--
 .../DefaultDatabaseShardingStrategyChangedProcessorTest.java |  3 ++-
 .../DefaultKeyGenerateStrategyChangedProcessorTest.java      |  3 ++-
 .../DefaultShardingAuditorStrategyChangedProcessorTest.java  |  3 ++-
 .../changed/DefaultShardingColumnChangedProcessorTest.java   |  3 ++-
 .../DefaultTableShardingStrategyChangedProcessorTest.java    |  3 ++-
 .../rule/changed/KeyGeneratorChangedProcessorTest.java       |  3 ++-
 .../rule/changed/ShardingAlgorithmChangedProcessorTest.java  |  3 ++-
 .../rule/changed/ShardingAuditorChangedProcessorTest.java    |  3 ++-
 .../rule/changed/ShardingAutoTableChangedProcessorTest.java  |  3 ++-
 .../rule/changed/ShardingCacheChangedProcessorTest.java      |  3 ++-
 .../rule/changed/ShardingTableChangedProcessorTest.java      |  3 ++-
 .../changed/ShardingTableReferenceChangedProcessorTest.java  |  3 ++-
 .../core/processor/AlgorithmChangedProcessorTest.java        |  3 ++-
 .../processor/fixture/FixtureAlgorithmChangedProcessor.java  |  5 +++--
 .../rule/changed/DefaultDataSourceChangedProcessor.java      |  5 +++--
 .../single/rule/changed/SingleTableChangedProcessor.java     |  5 +++--
 .../rule/changed/DefaultDataSourceChangedProcessorTest.java  |  3 ++-
 .../single/rule/changed/SingleTableChangedProcessorTest.java |  3 ++-
 .../changed/executor/type/RuleItemAlteredBuildExecutor.java  | 12 ++++++------
 .../changed/executor/type/RuleItemDroppedBuildExecutor.java  |  5 +++--
 .../mode/metadata/manager/rule/DatabaseRuleItemManager.java  |  4 ++--
 .../mode/spi/rule/RuleItemConfigurationChangedProcessor.java |  4 ++++
 .../shardingsphere/mode/spi/rule/item/RuleChangedItem.java   |  2 +-
 .../DropUniqueRuleItem.java => RuleChangedItemType.java}     | 12 +++++++-----
 .../mode/spi/rule/item/alter/AlterNamedRuleItem.java         |  3 ++-
 .../mode/spi/rule/item/alter/AlterUniqueRuleItem.java        |  3 ++-
 .../mode/spi/rule/item/drop/DropNamedRuleItem.java           |  3 ++-
 .../mode/spi/rule/item/drop/DropUniqueRuleItem.java          |  3 ++-
 62 files changed, 161 insertions(+), 98 deletions(-)

diff --git 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastTableChangedProcessor.java
 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastTableChangedProcessor.java
index 1ae7bfe0e1f..b18afee1150 100644
--- 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastTableChangedProcessor.java
+++ 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastTableChangedProcessor.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 
@@ -56,7 +57,7 @@ public final class BroadcastTableChangedProcessor implements 
RuleItemConfigurati
     }
     
     @Override
-    public String getType() {
-        return "broadcast.tables";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("broadcast", "tables");
     }
 }
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastTableChangedProcessorTest.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastTableChangedProcessorTest.java
index 1816011bb29..7e7aec7f6bc 100644
--- 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastTableChangedProcessorTest.java
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastTableChangedProcessorTest.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
@@ -40,7 +41,7 @@ class BroadcastTableChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<BroadcastRuleConfiguration, 
BroadcastRuleConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, "broadcast.tables");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("broadcast", "tables"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptTableChangedProcessor.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptTableChangedProcessor.java
index b57d9119576..a06a1120691 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptTableChangedProcessor.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptTableChangedProcessor.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.encrypt.yaml.swapper.rule.YamlEncryptTableRuleC
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
@@ -61,7 +62,7 @@ public final class EncryptTableChangedProcessor implements 
RuleItemConfiguration
     }
     
     @Override
-    public String getType() {
-        return "encrypt.tables";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("encrypt", "tables");
     }
 }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptorChangedProcessor.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptorChangedProcessor.java
index 307c00fad47..df5275d523b 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptorChangedProcessor.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptorChangedProcessor.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.encrypt.config.EncryptRuleConfiguration;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.algorithm.core.processor.AlgorithmChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
@@ -46,7 +47,7 @@ public final class EncryptorChangedProcessor extends 
AlgorithmChangedProcessor<E
     }
     
     @Override
-    public String getType() {
-        return "encrypt.encryptors";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("encrypt", "encryptors");
     }
 }
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptTableChangedProcessorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptTableChangedProcessorTest.java
index e846f1cd3e6..3e5bfc840ca 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptTableChangedProcessorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptTableChangedProcessorTest.java
@@ -30,6 +30,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.junit.jupiter.api.Test;
@@ -49,7 +50,7 @@ class EncryptTableChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<EncryptRuleConfiguration, 
EncryptTableRuleConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, "encrypt.tables");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("encrypt", "tables"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptorChangedProcessorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptorChangedProcessorTest.java
index 432813b9790..b65491c7781 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptorChangedProcessorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/changed/EncryptorChangedProcessorTest.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.junit.jupiter.api.Test;
@@ -44,7 +45,7 @@ class EncryptorChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<EncryptRuleConfiguration, 
AlgorithmConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, "encrypt.encryptors");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("encrypt", "encryptors"));
     
     @Test
     void assertFindRuleConfigurationWhenAbsent() {
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/changed/MaskAlgorithmChangedProcessor.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/changed/MaskAlgorithmChangedProcessor.java
index be4f257ccbe..d7e8bd6d065 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/changed/MaskAlgorithmChangedProcessor.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/changed/MaskAlgorithmChangedProcessor.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfigurat
 import 
org.apache.shardingsphere.infra.algorithm.core.processor.AlgorithmChangedProcessor;
 import org.apache.shardingsphere.mask.config.MaskRuleConfiguration;
 import org.apache.shardingsphere.mask.rule.MaskRule;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
@@ -46,7 +47,7 @@ public final class MaskAlgorithmChangedProcessor extends 
AlgorithmChangedProcess
     }
     
     @Override
-    public String getType() {
-        return "mask.mask_algorithms";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("mask", "mask_algorithms");
     }
 }
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/changed/MaskTableChangedProcessor.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/changed/MaskTableChangedProcessor.java
index d356868903c..458bb207a01 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/changed/MaskTableChangedProcessor.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/changed/MaskTableChangedProcessor.java
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.mask.rule.MaskRule;
 import 
org.apache.shardingsphere.mask.yaml.config.rule.YamlMaskTableRuleConfiguration;
 import 
org.apache.shardingsphere.mask.yaml.swapper.rule.YamlMaskTableRuleConfigurationSwapper;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
@@ -60,7 +61,7 @@ public final class MaskTableChangedProcessor implements 
RuleItemConfigurationCha
     }
     
     @Override
-    public String getType() {
-        return "mask.tables";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("mask", "tables");
     }
 }
diff --git 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/changed/MaskAlgorithmChangedProcessorTest.java
 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/changed/MaskAlgorithmChangedProcessorTest.java
index dac0176f6cd..059f3cdad2a 100644
--- 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/changed/MaskAlgorithmChangedProcessorTest.java
+++ 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/changed/MaskAlgorithmChangedProcessorTest.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mask.config.MaskRuleConfiguration;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.junit.jupiter.api.Test;
@@ -44,7 +45,7 @@ class MaskAlgorithmChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final RuleItemConfigurationChangedProcessor<MaskRuleConfiguration, 
AlgorithmConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"mask.mask_algorithms");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("mask", "mask_algorithms"));
     
     @Test
     void assertFindRuleConfigurationWhenAbsent() {
diff --git 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/changed/MaskTableChangedProcessorTest.java
 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/changed/MaskTableChangedProcessorTest.java
index e0f281a2a41..ad3c7bb19ae 100644
--- 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/changed/MaskTableChangedProcessorTest.java
+++ 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/changed/MaskTableChangedProcessorTest.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.mask.rule.MaskRule;
 import 
org.apache.shardingsphere.mask.yaml.config.rule.YamlMaskColumnRuleConfiguration;
 import 
org.apache.shardingsphere.mask.yaml.config.rule.YamlMaskTableRuleConfiguration;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.junit.jupiter.api.Test;
@@ -47,7 +48,7 @@ class MaskTableChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final RuleItemConfigurationChangedProcessor<MaskRuleConfiguration, 
MaskTableRuleConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, "mask.tables");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("mask", "tables"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingDataSourceChangedProcessor.java
 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingDataSourceChangedProcessor.java
index 53348cd9554..99b1b1478d0 100644
--- 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingDataSourceChangedProcessor.java
+++ 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingDataSourceChangedProcessor.java
@@ -21,6 +21,7 @@ import com.google.common.base.Strings;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
@@ -74,7 +75,7 @@ public final class 
ReadwriteSplittingDataSourceChangedProcessor
     }
     
     @Override
-    public String getType() {
-        return "readwrite_splitting.data_source_groups";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("readwrite_splitting", 
"data_source_groups");
     }
 }
diff --git 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingLoadBalancerChangedProcessor.java
 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingLoadBalancerChangedProcessor.java
index 222eb2d679b..e7ade65d7a5 100644
--- 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingLoadBalancerChangedProcessor.java
+++ 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingLoadBalancerChangedProcessor.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.readwritesplitting.rule.changed;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.algorithm.core.processor.AlgorithmChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import 
org.apache.shardingsphere.readwritesplitting.config.ReadwriteSplittingRuleConfiguration;
 import 
org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 
@@ -46,7 +47,7 @@ public final class 
ReadwriteSplittingLoadBalancerChangedProcessor extends Algori
     }
     
     @Override
-    public String getType() {
-        return "readwrite_splitting.load_balancers";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("readwrite_splitting", 
"load_balancers");
     }
 }
diff --git 
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingDataSourceChangedProcessorTest.java
 
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingDataSourceChangedProcessorTest.java
index 55d8e8d7cb2..8fff6f50c56 100644
--- 
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingDataSourceChangedProcessorTest.java
+++ 
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingDataSourceChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import 
org.apache.shardingsphere.readwritesplitting.config.ReadwriteSplittingRuleConfiguration;
@@ -46,7 +47,7 @@ class ReadwriteSplittingDataSourceChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ReadwriteSplittingRuleConfiguration, 
ReadwriteSplittingDataSourceGroupRuleConfiguration> processor = 
TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"readwrite_splitting.data_source_groups");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("readwrite_splitting", "data_source_groups"));
     
     @Test
     void 
assertSwapRuleItemConfigurationWithoutTransactionalReadQueryStrategy() {
diff --git 
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingLoadBalancerChangedProcessorTest.java
 
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingLoadBalancerChangedProcessorTest.java
index bfbe7bb28f1..dcdf11df0d1 100644
--- 
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingLoadBalancerChangedProcessorTest.java
+++ 
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/changed/ReadwriteSplittingLoadBalancerChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import 
org.apache.shardingsphere.readwritesplitting.config.ReadwriteSplittingRuleConfiguration;
@@ -44,7 +45,7 @@ class ReadwriteSplittingLoadBalancerChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ReadwriteSplittingRuleConfiguration, 
AlgorithmConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"readwrite_splitting.load_balancers");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("readwrite_splitting", "load_balancers"));
     
     @Test
     void assertFindRuleConfigurationWhenAbsent() {
diff --git 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/DefaultShadowAlgorithmNameChangedProcessor.java
 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/DefaultShadowAlgorithmNameChangedProcessor.java
index 0b2456c5757..1450253696a 100644
--- 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/DefaultShadowAlgorithmNameChangedProcessor.java
+++ 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/DefaultShadowAlgorithmNameChangedProcessor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.rule.changed;
 
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.shadow.config.ShadowRuleConfiguration;
@@ -50,7 +51,7 @@ public final class DefaultShadowAlgorithmNameChangedProcessor 
implements RuleIte
     }
     
     @Override
-    public String getType() {
-        return "shadow.default_shadow_algorithm_name";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("shadow", 
"default_shadow_algorithm_name");
     }
 }
diff --git 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowAlgorithmChangedProcessor.java
 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowAlgorithmChangedProcessor.java
index ad88123d664..6e1d96fe183 100644
--- 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowAlgorithmChangedProcessor.java
+++ 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowAlgorithmChangedProcessor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.rule.changed;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.algorithm.core.processor.AlgorithmChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.shadow.config.ShadowRuleConfiguration;
 import org.apache.shardingsphere.shadow.rule.ShadowRule;
 
@@ -44,7 +45,7 @@ public final class ShadowAlgorithmChangedProcessor extends 
AlgorithmChangedProce
     }
     
     @Override
-    public String getType() {
-        return "shadow.shadow_algorithms";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("shadow", "shadow_algorithms");
     }
 }
diff --git 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowDataSourceChangedProcessor.java
 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowDataSourceChangedProcessor.java
index fb02b4ff19d..f7aaef55931 100644
--- 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowDataSourceChangedProcessor.java
+++ 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowDataSourceChangedProcessor.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.shadow.rule.changed;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
@@ -58,7 +59,7 @@ public final class ShadowDataSourceChangedProcessor 
implements RuleItemConfigura
     }
     
     @Override
-    public String getType() {
-        return "shadow.data_sources";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("shadow", "data_sources");
     }
 }
diff --git 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowTableChangedProcessor.java
 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowTableChangedProcessor.java
index 3a87629b92f..7e16de8c2b4 100644
--- 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowTableChangedProcessor.java
+++ 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/changed/ShadowTableChangedProcessor.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.shadow.rule.changed;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
@@ -56,7 +57,7 @@ public final class ShadowTableChangedProcessor implements 
RuleItemConfigurationC
     }
     
     @Override
-    public String getType() {
-        return "shadow.tables";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("shadow", "tables");
     }
 }
diff --git 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/DefaultShadowAlgorithmNameChangedProcessorTest.java
 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/DefaultShadowAlgorithmNameChangedProcessorTest.java
index 78ab596c54f..5dd82c5ce6e 100644
--- 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/DefaultShadowAlgorithmNameChangedProcessorTest.java
+++ 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/DefaultShadowAlgorithmNameChangedProcessorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.shadow.config.ShadowRuleConfiguration;
@@ -39,7 +40,7 @@ class DefaultShadowAlgorithmNameChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShadowRuleConfiguration, String> 
processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"shadow.default_shadow_algorithm_name");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("shadow", "default_shadow_algorithm_name"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowAlgorithmChangedProcessorTest.java
 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowAlgorithmChangedProcessorTest.java
index b85a0228a5e..7f8dd1065d5 100644
--- 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowAlgorithmChangedProcessorTest.java
+++ 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowAlgorithmChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.shadow.config.ShadowRuleConfiguration;
@@ -41,7 +42,7 @@ class ShadowAlgorithmChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShadowRuleConfiguration, 
AlgorithmConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"shadow.shadow_algorithms");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("shadow", "shadow_algorithms"));
     
     @Test
     void assertFindRuleConfigurationWhenAbsent() {
diff --git 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowDataSourceChangedProcessorTest.java
 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowDataSourceChangedProcessorTest.java
index 8b0481f8f86..4020e8532aa 100644
--- 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowDataSourceChangedProcessorTest.java
+++ 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowDataSourceChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.shadow.config.ShadowRuleConfiguration;
@@ -44,7 +45,7 @@ class ShadowDataSourceChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShadowRuleConfiguration, 
ShadowDataSourceConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"shadow.data_sources");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("shadow", "data_sources"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowTableChangedProcessorTest.java
 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowTableChangedProcessorTest.java
index 193bdbbe1f5..0e17301bc69 100644
--- 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowTableChangedProcessorTest.java
+++ 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/changed/ShadowTableChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.shadow.config.ShadowRuleConfiguration;
@@ -43,7 +44,7 @@ class ShadowTableChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShadowRuleConfiguration, 
ShadowTableConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, "shadow.tables");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("shadow", "tables"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultDatabaseShardingStrategyChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultDatabaseShardingStrategyChangedProcessor.java
index a3526bc8036..617ac3ef827 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultDatabaseShardingStrategyChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultDatabaseShardingStrategyChangedProcessor.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -54,7 +55,7 @@ public final class 
DefaultDatabaseShardingStrategyChangedProcessor implements Ru
     }
     
     @Override
-    public String getType() {
-        return "sharding.default_database_strategy";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", 
"default_database_strategy");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultKeyGenerateStrategyChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultKeyGenerateStrategyChangedProcessor.java
index e87847b1a2d..f8c9bff794b 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultKeyGenerateStrategyChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultKeyGenerateStrategyChangedProcessor.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -54,7 +55,7 @@ public final class DefaultKeyGenerateStrategyChangedProcessor 
implements RuleIte
     }
     
     @Override
-    public String getType() {
-        return "sharding.default_key_generate_strategy";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", 
"default_key_generate_strategy");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingAuditorStrategyChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingAuditorStrategyChangedProcessor.java
index 4ac7004cdf7..00bfb096d1f 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingAuditorStrategyChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingAuditorStrategyChangedProcessor.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -54,7 +55,7 @@ public final class 
DefaultShardingAuditorStrategyChangedProcessor implements Rul
     }
     
     @Override
-    public String getType() {
-        return "sharding.default_audit_strategy";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", "default_audit_strategy");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingColumnChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingColumnChangedProcessor.java
index baf6574d244..b741edcc45e 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingColumnChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingColumnChangedProcessor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -50,7 +51,7 @@ public final class DefaultShardingColumnChangedProcessor 
implements RuleItemConf
     }
     
     @Override
-    public String getType() {
-        return "sharding.default_sharding_column";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", "default_sharding_column");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultTableShardingStrategyChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultTableShardingStrategyChangedProcessor.java
index 933fcdd07fd..d1d5165fa39 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultTableShardingStrategyChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/DefaultTableShardingStrategyChangedProcessor.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -54,7 +55,7 @@ public final class 
DefaultTableShardingStrategyChangedProcessor implements RuleI
     }
     
     @Override
-    public String getType() {
-        return "sharding.default_table_strategy";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", "default_table_strategy");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/KeyGeneratorChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/KeyGeneratorChangedProcessor.java
index df72a18fb46..fcf30d4f1bb 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/KeyGeneratorChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/KeyGeneratorChangedProcessor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.algorithm.core.processor.AlgorithmChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
@@ -44,7 +45,7 @@ public final class KeyGeneratorChangedProcessor extends 
AlgorithmChangedProcesso
     }
     
     @Override
-    public String getType() {
-        return "sharding.key_generators";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", "key_generators");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAlgorithmChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAlgorithmChangedProcessor.java
index d378fe20544..7aeec466ba0 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAlgorithmChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAlgorithmChangedProcessor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.algorithm.core.processor.AlgorithmChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
@@ -44,7 +45,7 @@ public final class ShardingAlgorithmChangedProcessor extends 
AlgorithmChangedPro
     }
     
     @Override
-    public String getType() {
-        return "sharding.sharding_algorithms";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", "sharding_algorithms");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAuditorChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAuditorChangedProcessor.java
index ecf33eb59a7..b25d42efb7c 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAuditorChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAuditorChangedProcessor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.algorithm.core.processor.AlgorithmChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
@@ -44,7 +45,7 @@ public final class ShardingAuditorChangedProcessor extends 
AlgorithmChangedProce
     }
     
     @Override
-    public String getType() {
-        return "sharding.auditors";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", "auditors");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAutoTableChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAutoTableChangedProcessor.java
index 29f46403b5f..3ac39bd2774 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAutoTableChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAutoTableChangedProcessor.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
@@ -57,7 +58,7 @@ public final class ShardingAutoTableChangedProcessor 
implements RuleItemConfigur
     }
     
     @Override
-    public String getType() {
-        return "sharding.auto_tables";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", "auto_tables");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingCacheChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingCacheChangedProcessor.java
index 47c34c1f531..4baef332d84 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingCacheChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingCacheChangedProcessor.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -54,7 +55,7 @@ public final class ShardingCacheChangedProcessor implements 
RuleItemConfiguratio
     }
     
     @Override
-    public String getType() {
-        return "sharding.sharding_cache";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", "sharding_cache");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableChangedProcessor.java
index 6319ee6bf38..b0df27e2132 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableChangedProcessor.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
@@ -57,7 +58,7 @@ public final class ShardingTableChangedProcessor implements 
RuleItemConfiguratio
     }
     
     @Override
-    public String getType() {
-        return "sharding.tables";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", "tables");
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableReferenceChangedProcessor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableReferenceChangedProcessor.java
index 7e5a04ce109..9eabe827af9 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableReferenceChangedProcessor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableReferenceChangedProcessor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sharding.rule.changed;
 
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
@@ -55,7 +56,7 @@ public final class ShardingTableReferenceChangedProcessor 
implements RuleItemCon
     }
     
     @Override
-    public String getType() {
-        return "sharding.binding_tables";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("sharding", "binding_tables");
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultDatabaseShardingStrategyChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultDatabaseShardingStrategyChangedProcessorTest.java
index e48aed02d43..8d503a8f018 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultDatabaseShardingStrategyChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultDatabaseShardingStrategyChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -46,7 +47,7 @@ class DefaultDatabaseShardingStrategyChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
ShardingStrategyConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"sharding.default_database_strategy");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "default_database_strategy"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultKeyGenerateStrategyChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultKeyGenerateStrategyChangedProcessorTest.java
index 40a6be833b7..98faf6c5cdb 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultKeyGenerateStrategyChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultKeyGenerateStrategyChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -43,7 +44,7 @@ class DefaultKeyGenerateStrategyChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
KeyGenerateStrategyConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"sharding.default_key_generate_strategy");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "default_key_generate_strategy"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingAuditorStrategyChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingAuditorStrategyChangedProcessorTest.java
index 6da1cb56a12..e3f2ae27795 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingAuditorStrategyChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingAuditorStrategyChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -44,7 +45,7 @@ class DefaultShardingAuditorStrategyChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
ShardingAuditStrategyConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"sharding.default_audit_strategy");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "default_audit_strategy"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingColumnChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingColumnChangedProcessorTest.java
index 3528bd17b6e..ec27f38bd40 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingColumnChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultShardingColumnChangedProcessorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -39,7 +40,7 @@ class DefaultShardingColumnChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, String> 
processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"sharding.default_sharding_column");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "default_sharding_column"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultTableShardingStrategyChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultTableShardingStrategyChangedProcessorTest.java
index db679af3adc..e6d713c999a 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultTableShardingStrategyChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/DefaultTableShardingStrategyChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -46,7 +47,7 @@ class DefaultTableShardingStrategyChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
ShardingStrategyConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"sharding.default_table_strategy");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "default_table_strategy"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/KeyGeneratorChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/KeyGeneratorChangedProcessorTest.java
index c4c5fd0aef6..b67450690fb 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/KeyGeneratorChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/KeyGeneratorChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -41,7 +42,7 @@ class KeyGeneratorChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
AlgorithmConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"sharding.key_generators");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "key_generators"));
     
     @Test
     void assertFindRuleConfigurationWhenAbsent() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAlgorithmChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAlgorithmChangedProcessorTest.java
index 8447bea553c..fcc26b755b4 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAlgorithmChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAlgorithmChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -41,7 +42,7 @@ class ShardingAlgorithmChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
AlgorithmConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"sharding.sharding_algorithms");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "sharding_algorithms"));
     
     @Test
     void assertFindRuleConfigurationWhenAbsent() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAuditorChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAuditorChangedProcessorTest.java
index 1ee2d42b880..09f00a19ed8 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAuditorChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAuditorChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -41,7 +42,7 @@ class ShardingAuditorChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
AlgorithmConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, "sharding.auditors");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "auditors"));
     
     @Test
     void assertFindRuleConfigurationWhenAbsent() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAutoTableChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAutoTableChangedProcessorTest.java
index e2f007ce877..7212a670bc0 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAutoTableChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingAutoTableChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -44,7 +45,7 @@ class ShardingAutoTableChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
ShardingAutoTableRuleConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"sharding.auto_tables");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "auto_tables"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingCacheChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingCacheChangedProcessorTest.java
index b74a486b1dd..6e6dcd5fcaa 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingCacheChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingCacheChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -46,7 +47,7 @@ class ShardingCacheChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
ShardingCacheConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"sharding.sharding_cache");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "sharding_cache"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableChangedProcessorTest.java
index ede2e8cfb58..32f1445cdca 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableChangedProcessorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -44,7 +45,7 @@ class ShardingTableChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
ShardingTableRuleConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, "sharding.tables");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "tables"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableReferenceChangedProcessorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableReferenceChangedProcessorTest.java
index fdc0ecb318d..1b66f41ba15 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableReferenceChangedProcessorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/changed/ShardingTableReferenceChangedProcessorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -42,7 +43,7 @@ class ShardingTableReferenceChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, 
ShardingTableReferenceRuleConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"sharding.binding_tables");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("sharding", "binding_tables"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/infra/algorithm/core/src/test/java/org/apache/shardingsphere/infra/algorithm/core/processor/AlgorithmChangedProcessorTest.java
 
b/infra/algorithm/core/src/test/java/org/apache/shardingsphere/infra/algorithm/core/processor/AlgorithmChangedProcessorTest.java
index 69cdfc53919..e69defc00da 100644
--- 
a/infra/algorithm/core/src/test/java/org/apache/shardingsphere/infra/algorithm/core/processor/AlgorithmChangedProcessorTest.java
+++ 
b/infra/algorithm/core/src/test/java/org/apache/shardingsphere/infra/algorithm/core/processor/AlgorithmChangedProcessorTest.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.junit.jupiter.api.Test;
@@ -44,7 +45,7 @@ class AlgorithmChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<AlgorithmChangedProcessorFixtureRuleConfiguration,
 AlgorithmConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, "FIXTURE");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("fixture", "algorithm"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/infra/algorithm/core/src/test/java/org/apache/shardingsphere/infra/algorithm/core/processor/fixture/FixtureAlgorithmChangedProcessor.java
 
b/infra/algorithm/core/src/test/java/org/apache/shardingsphere/infra/algorithm/core/processor/fixture/FixtureAlgorithmChangedProcessor.java
index 8863bf6bfe7..9bd67b118bf 100644
--- 
a/infra/algorithm/core/src/test/java/org/apache/shardingsphere/infra/algorithm/core/processor/fixture/FixtureAlgorithmChangedProcessor.java
+++ 
b/infra/algorithm/core/src/test/java/org/apache/shardingsphere/infra/algorithm/core/processor/fixture/FixtureAlgorithmChangedProcessor.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.infra.algorithm.core.processor.fixture;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.algorithm.core.processor.AlgorithmChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 
 import java.util.Map;
 
@@ -39,7 +40,7 @@ public final class FixtureAlgorithmChangedProcessor extends 
AlgorithmChangedProc
     }
     
     @Override
-    public Object getType() {
-        return "FIXTURE";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("fixture", "algorithm");
     }
 }
diff --git 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/changed/DefaultDataSourceChangedProcessor.java
 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/changed/DefaultDataSourceChangedProcessor.java
index 9f697b6e9f0..bb2a7bf29e8 100644
--- 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/changed/DefaultDataSourceChangedProcessor.java
+++ 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/changed/DefaultDataSourceChangedProcessor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.single.rule.changed;
 
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
@@ -50,7 +51,7 @@ public final class DefaultDataSourceChangedProcessor 
implements RuleItemConfigur
     }
     
     @Override
-    public String getType() {
-        return "single.default_data_source";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("single", "default_data_source");
     }
 }
diff --git 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/changed/SingleTableChangedProcessor.java
 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/changed/SingleTableChangedProcessor.java
index 506928f9ed3..f88a7bebe91 100644
--- 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/changed/SingleTableChangedProcessor.java
+++ 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/changed/SingleTableChangedProcessor.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.single.rule.changed;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
@@ -55,7 +56,7 @@ public final class SingleTableChangedProcessor implements 
RuleItemConfigurationC
     }
     
     @Override
-    public String getType() {
-        return "single.tables";
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("single", "tables");
     }
 }
diff --git 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/changed/DefaultDataSourceChangedProcessorTest.java
 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/changed/DefaultDataSourceChangedProcessorTest.java
index e65b64c351a..89670612be9 100644
--- 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/changed/DefaultDataSourceChangedProcessorTest.java
+++ 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/changed/DefaultDataSourceChangedProcessorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
@@ -40,7 +41,7 @@ class DefaultDataSourceChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<SingleRuleConfiguration, String> 
processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, 
"single.default_data_source");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("single", "default_data_source"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/changed/SingleTableChangedProcessorTest.java
 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/changed/SingleTableChangedProcessorTest.java
index 8cfeea71bac..09cfb0f04bb 100644
--- 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/changed/SingleTableChangedProcessorTest.java
+++ 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/changed/SingleTableChangedProcessorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
@@ -40,7 +41,7 @@ class SingleTableChangedProcessorTest {
     
     @SuppressWarnings("unchecked")
     private final 
RuleItemConfigurationChangedProcessor<SingleRuleConfiguration, 
SingleRuleConfiguration> processor = TypedSPILoader.getService(
-            RuleItemConfigurationChangedProcessor.class, "single.tables");
+            RuleItemConfigurationChangedProcessor.class, new 
RuleChangedItemType("single", "tables"));
     
     @Test
     void assertSwapRuleItemConfiguration() {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemAlteredBuildExecutor.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemAlteredBuildExecutor.java
index 88c21e12e45..0bbe52cc8d9 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemAlteredBuildExecutor.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemAlteredBuildExecutor.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleI
 import 
org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleNodePath;
 import 
org.apache.shardingsphere.mode.node.path.type.version.VersionNodePathParser;
 import org.apache.shardingsphere.mode.node.rule.node.DatabaseRuleNode;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterUniqueRuleItem;
@@ -37,17 +38,16 @@ public final class RuleItemAlteredBuildExecutor implements 
RuleItemChangedBuildE
     @Override
     public Optional<AlterRuleItem> build(final DatabaseRuleNode 
databaseRuleNode, final String databaseName, final String path, final Integer 
activeVersion) {
         for (String each : databaseRuleNode.getNamedItems()) {
-            DatabaseRuleNodePath databaseRuleNodePath = new 
DatabaseRuleNodePath(NodePathPattern.IDENTIFIER, databaseRuleNode.getRuleType(),
-                    new DatabaseRuleItem(each, 
NodePathPattern.QUALIFIED_IDENTIFIER));
-            Optional<String> itemName = new 
VersionNodePathParser(databaseRuleNodePath).findIdentifierByActiveVersionPath(path,
 2);
+            DatabaseRuleNodePath databaseRuleNodePath = new 
DatabaseRuleNodePath(databaseName, databaseRuleNode.getRuleType(), new 
DatabaseRuleItem(each, NodePathPattern.QUALIFIED_IDENTIFIER));
+            Optional<String> itemName = new 
VersionNodePathParser(databaseRuleNodePath).findIdentifierByActiveVersionPath(path,
 1);
             if (itemName.isPresent()) {
-                return Optional.of(new AlterNamedRuleItem(databaseName, 
itemName.get(), path, activeVersion, databaseRuleNode.getRuleType() + "." + 
each));
+                return Optional.of(new AlterNamedRuleItem(databaseName, 
itemName.get(), path, activeVersion, new 
RuleChangedItemType(databaseRuleNode.getRuleType(), each)));
             }
         }
         for (String each : databaseRuleNode.getUniqueItems()) {
-            DatabaseRuleNodePath databaseRuleNodePath = new 
DatabaseRuleNodePath(NodePathPattern.IDENTIFIER, 
databaseRuleNode.getRuleType(), new DatabaseRuleItem(each));
+            DatabaseRuleNodePath databaseRuleNodePath = new 
DatabaseRuleNodePath(databaseName, databaseRuleNode.getRuleType(), new 
DatabaseRuleItem(each));
             if (new 
VersionNodePathParser(databaseRuleNodePath).isActiveVersionPath(path)) {
-                return Optional.of(new AlterUniqueRuleItem(databaseName, path, 
activeVersion, databaseRuleNode.getRuleType() + "." + each));
+                return Optional.of(new AlterUniqueRuleItem(databaseName, path, 
activeVersion, new RuleChangedItemType(databaseRuleNode.getRuleType(), each)));
             }
         }
         return Optional.empty();
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemDroppedBuildExecutor.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemDroppedBuildExecutor.java
index d721d1a926d..7b3ef0c0368 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemDroppedBuildExecutor.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemDroppedBuildExecutor.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.mode.node.path.type.version.VersionNodePathPars
 import org.apache.shardingsphere.mode.node.rule.node.DatabaseRuleNode;
 import 
org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleItem;
 import 
org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleNodePath;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropUniqueRuleItem;
@@ -40,13 +41,13 @@ public final class RuleItemDroppedBuildExecutor implements 
RuleItemChangedBuildE
         for (String each : databaseRuleNode.getNamedItems()) {
             Optional<String> itemName = NodePathSearcher.find(path, 
DatabaseRuleNodePath.createRuleItemNameSearchCriteria(databaseRuleNode.getRuleType(),
 each));
             if (itemName.isPresent()) {
-                return Optional.of(new DropNamedRuleItem(databaseName, 
itemName.get(), databaseRuleNode.getRuleType() + "." + each));
+                return Optional.of(new DropNamedRuleItem(databaseName, 
itemName.get(), new RuleChangedItemType(databaseRuleNode.getRuleType(), each)));
             }
         }
         for (String each : databaseRuleNode.getUniqueItems()) {
             DatabaseRuleNodePath databaseRuleNodePath = new 
DatabaseRuleNodePath(NodePathPattern.IDENTIFIER, 
databaseRuleNode.getRuleType(), new DatabaseRuleItem(each));
             if (new 
VersionNodePathParser(databaseRuleNodePath).isActiveVersionPath(path)) {
-                return Optional.of(new DropUniqueRuleItem(databaseName, 
databaseRuleNode.getRuleType() + "." + each));
+                return Optional.of(new DropUniqueRuleItem(databaseName, new 
RuleChangedItemType(databaseRuleNode.getRuleType(), each)));
             }
         }
         return Optional.empty();
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
index dd369734fc8..4fd9ab8608a 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
@@ -58,8 +58,8 @@ public final class DatabaseRuleItemManager {
         
Preconditions.checkArgument(String.valueOf(alterRuleItem.getActiveVersion()).equals(metaDataPersistFacade.getRepository().query(alterRuleItem.getActiveVersionKey())),
                 "Invalid active version: %s of key: %s", 
alterRuleItem.getActiveVersion(), alterRuleItem.getActiveVersionKey());
         RuleItemConfigurationChangedProcessor processor = 
TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class, 
alterRuleItem.getType());
-        String ruleType = alterRuleItem.getType().split("\\.")[0];
-        String itemType = alterRuleItem.getType().split("\\.")[1];
+        String ruleType = alterRuleItem.getType().getRuleType();
+        String itemType = alterRuleItem.getType().getRuleItemType();
         DatabaseRuleItem databaseRuleItem = alterRuleItem instanceof 
AlterNamedRuleItem
                 ? new DatabaseRuleItem(itemType, ((AlterNamedRuleItem) 
alterRuleItem).getItemName())
                 : new DatabaseRuleItem(itemType);
diff --git 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/RuleItemConfigurationChangedProcessor.java
 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/RuleItemConfigurationChangedProcessor.java
index 6f2e7d52726..afb823dc3b6 100644
--- 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/RuleItemConfigurationChangedProcessor.java
+++ 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/RuleItemConfigurationChangedProcessor.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPI;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
 import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 
@@ -66,4 +67,7 @@ public interface RuleItemConfigurationChangedProcessor<T 
extends RuleConfigurati
      * @param currentRuleConfig current rule configuration
      */
     void dropRuleItemConfiguration(DropRuleItem dropRuleItem, T 
currentRuleConfig);
+    
+    @Override
+    RuleChangedItemType getType();
 }
diff --git 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/RuleChangedItem.java
 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/RuleChangedItem.java
index 8702c30814c..42257e7eeb6 100644
--- 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/RuleChangedItem.java
+++ 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/RuleChangedItem.java
@@ -27,5 +27,5 @@ public interface RuleChangedItem {
      *
      * @return rule item type
      */
-    String getType();
+    RuleChangedItemType getType();
 }
diff --git 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropUniqueRuleItem.java
 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/RuleChangedItemType.java
similarity index 78%
copy from 
mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropUniqueRuleItem.java
copy to 
mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/RuleChangedItemType.java
index f52583ee2b8..7d71dfda560 100644
--- 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropUniqueRuleItem.java
+++ 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/RuleChangedItemType.java
@@ -15,19 +15,21 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.spi.rule.item.drop;
+package org.apache.shardingsphere.mode.spi.rule.item;
 
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 
 /**
- * Drop unique rule item.
+ * Rule changed item type.
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropUniqueRuleItem implements DropRuleItem {
+@EqualsAndHashCode
+public final class RuleChangedItemType {
     
-    private final String databaseName;
+    private final String ruleType;
     
-    private final String type;
+    private final String ruleItemType;
 }
diff --git 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterNamedRuleItem.java
 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterNamedRuleItem.java
index 0e9c6095424..2331611e490 100644
--- 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterNamedRuleItem.java
+++ 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterNamedRuleItem.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.spi.rule.item.alter;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 
 /**
  * Alter named rule item.
@@ -35,5 +36,5 @@ public final class AlterNamedRuleItem implements 
AlterRuleItem {
     
     private final int activeVersion;
     
-    private final String type;
+    private final RuleChangedItemType type;
 }
diff --git 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterUniqueRuleItem.java
 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterUniqueRuleItem.java
index d9a70b4c448..1914e56321c 100644
--- 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterUniqueRuleItem.java
+++ 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterUniqueRuleItem.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.spi.rule.item.alter;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 
 /**
  * Alter unique rule item.
@@ -33,5 +34,5 @@ public final class AlterUniqueRuleItem implements 
AlterRuleItem {
     
     private final int activeVersion;
     
-    private final String type;
+    private final RuleChangedItemType type;
 }
diff --git 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropNamedRuleItem.java
 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropNamedRuleItem.java
index 2783bec3e2c..b61b88d8ca3 100644
--- 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropNamedRuleItem.java
+++ 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropNamedRuleItem.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.spi.rule.item.drop;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 
 /**
  * Drop named rule item.
@@ -31,5 +32,5 @@ public final class DropNamedRuleItem implements DropRuleItem {
     
     private final String itemName;
     
-    private final String type;
+    private final RuleChangedItemType type;
 }
diff --git 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropUniqueRuleItem.java
 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropUniqueRuleItem.java
index f52583ee2b8..d1a551d7c8b 100644
--- 
a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropUniqueRuleItem.java
+++ 
b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/drop/DropUniqueRuleItem.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.spi.rule.item.drop;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItemType;
 
 /**
  * Drop unique rule item.
@@ -29,5 +30,5 @@ public final class DropUniqueRuleItem implements DropRuleItem 
{
     
     private final String databaseName;
     
-    private final String type;
+    private final RuleChangedItemType type;
 }

Reply via email to