From 45022be3cee16e851affe4f8accf8c64d0bcbd38 Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Wed, 22 Jun 2022 18:34:05 +0800 Subject: [PATCH] =?UTF-8?q?feat[protocol]:=20=E5=8D=8F=E8=AE=AE=E7=B1=BB?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E4=B8=8D=E7=94=A8=E5=86=8D=E9=87=8D=E5=86=99?= =?UTF-8?q?protocolId()=E6=96=B9=E6=B3=95=E4=B9=9F=E8=83=BD=E5=A4=9F?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=8E=B7=E5=8F=96=E5=88=B0=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/zfoo/orm/lpmap/FileChannelMap.java | 7 +++---- .../main/java/com/zfoo/orm/lpmap/FileHeapMap.java | 9 ++++----- .../src/main/java/com/zfoo/protocol/IPacket.java | 8 +++++++- .../main/java/com/zfoo/protocol/ProtocolManager.java | 12 ++++++++---- .../zfoo/protocol/registration/ProtocolAnalysis.java | 6 ------ .../serializer/protobuf/GenerateProtobufUtils.java | 5 ++--- 6 files changed, 24 insertions(+), 23 deletions(-) diff --git a/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelMap.java b/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelMap.java index 5821f9b2..cd3eda11 100644 --- a/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelMap.java +++ b/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelMap.java @@ -16,7 +16,6 @@ import com.zfoo.protocol.IPacket; import com.zfoo.protocol.ProtocolManager; import com.zfoo.protocol.exception.RunException; import com.zfoo.protocol.registration.IProtocolRegistration; -import com.zfoo.protocol.registration.ProtocolAnalysis; import com.zfoo.protocol.util.FileUtils; import com.zfoo.protocol.util.IOUtils; import com.zfoo.protocol.util.StringUtils; @@ -40,11 +39,11 @@ import java.util.function.BiConsumer; */ public class FileChannelMap implements LpMap, Closeable { - private File dbFile; + private final File dbFile; protected RandomAccessFile dbFileRandomAccess; protected FileChannel dbFileChannel; - private File indexFile; + private final File indexFile; protected RandomAccessFile indexFileRandomAccess; protected FileChannel indexFileChannel; @@ -65,7 +64,7 @@ public class FileChannelMap implements LpMap, Closeable { this.indexFileRandomAccess = new RandomAccessFile(indexFile, "rw"); this.indexFileChannel = this.indexFileRandomAccess.getChannel(); - var protocolId = ProtocolAnalysis.getProtocolIdByClass(clazz); + var protocolId = ProtocolManager.getProtocolIdByClass(clazz); protocolRegistration = ProtocolManager.getProtocol(protocolId); indexBuffer = ByteBufAllocator.DEFAULT.ioBuffer(16); diff --git a/orm/src/main/java/com/zfoo/orm/lpmap/FileHeapMap.java b/orm/src/main/java/com/zfoo/orm/lpmap/FileHeapMap.java index 3de64521..2e61f95d 100644 --- a/orm/src/main/java/com/zfoo/orm/lpmap/FileHeapMap.java +++ b/orm/src/main/java/com/zfoo/orm/lpmap/FileHeapMap.java @@ -16,7 +16,6 @@ import com.zfoo.protocol.IPacket; import com.zfoo.protocol.ProtocolManager; import com.zfoo.protocol.buffer.ByteBufUtils; import com.zfoo.protocol.registration.IProtocolRegistration; -import com.zfoo.protocol.registration.ProtocolAnalysis; import com.zfoo.protocol.util.FileUtils; import com.zfoo.protocol.util.IOUtils; import com.zfoo.protocol.util.StringUtils; @@ -37,17 +36,17 @@ import java.util.function.BiConsumer; */ public class FileHeapMap implements LpMap { - private File dbFile; + private final File dbFile; - private IProtocolRegistration protocolRegistration; + private final IProtocolRegistration protocolRegistration; - private HeapMap heapMap; + private final HeapMap heapMap; public FileHeapMap(String dbPath, Class clazz) { try { this.dbFile = FileUtils.getOrCreateFile(dbPath, StringUtils.format("{}.db", clazz.getSimpleName())); - var protocolId = ProtocolAnalysis.getProtocolIdByClass(clazz); + var protocolId = ProtocolManager.getProtocolIdByClass(clazz); protocolRegistration = ProtocolManager.getProtocol(protocolId); heapMap = new HeapMap<>(); diff --git a/protocol/src/main/java/com/zfoo/protocol/IPacket.java b/protocol/src/main/java/com/zfoo/protocol/IPacket.java index f6c9f476..cf3ddf90 100644 --- a/protocol/src/main/java/com/zfoo/protocol/IPacket.java +++ b/protocol/src/main/java/com/zfoo/protocol/IPacket.java @@ -23,9 +23,15 @@ public interface IPacket { /** * 这个类的协议号 + *

+ * 子类可以不用重写这个方法,也能够通过反射自动获取到PROTOCOL_ID这个协议号,序列化一次对象只会调用一次,性能损失很小 + *

+ * 重写这个方法,使用多态获取协议号,可以提高一点性能 * * @return 协议号Id */ - short protocolId(); + default short protocolId() { + return ProtocolManager.getProtocolIdByClass(this.getClass()); + } } diff --git a/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java b/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java index e549fb47..1a974245 100644 --- a/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java +++ b/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java @@ -18,12 +18,11 @@ import com.zfoo.protocol.registration.IProtocolRegistration; import com.zfoo.protocol.registration.ProtocolAnalysis; import com.zfoo.protocol.registration.ProtocolModule; import com.zfoo.protocol.util.AssertionUtils; +import com.zfoo.protocol.util.ReflectionUtils; import com.zfoo.protocol.xml.XmlProtocols; import io.netty.buffer.ByteBuf; -import java.lang.reflect.Field; import java.util.Arrays; -import java.util.Comparator; import java.util.Objects; import java.util.Set; @@ -87,16 +86,21 @@ public class ProtocolManager { return moduleOptional.get(); } + public static short getProtocolIdByClass(Class clazz) { + var protocolIdField = ReflectionUtils.getFieldByNameInPOJOClass(clazz, PROTOCOL_ID); + return (short) ReflectionUtils.getField(protocolIdField, null); + } + public static void initProtocol(Set> protocolClassSet) { ProtocolAnalysis.analyze(protocolClassSet, GenerateOperation.NO_OPERATION); } public static void initProtocol(Set> protocolClassSet, GenerateOperation generateOperation) { - ProtocolAnalysis.analyze(protocolClassSet, generateOperation); + ProtocolAnalysis.analyze(protocolClassSet, generateOperation); } public static void initProtocol(XmlProtocols xmlProtocols, GenerateOperation generateOperation) { - ProtocolAnalysis.analyze(xmlProtocols, generateOperation); + ProtocolAnalysis.analyze(xmlProtocols, generateOperation); } } diff --git a/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java b/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java index 4b5354ab..8938b352 100644 --- a/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java +++ b/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java @@ -402,12 +402,6 @@ public class ProtocolAnalysis { throw new RunException("[type:{}]类型不正确", type); } - public static short getProtocolIdByClass(Class clazz) { - var protocolIdField = ReflectionUtils.getFieldByNameInPOJOClass(clazz, PROTOCOL_ID); - ReflectionUtils.makeAccessible(protocolIdField); - return (short) ReflectionUtils.getField(protocolIdField, null); - } - /** * 此方法仅在生成协议的时候调用,一旦运行,不能调用 diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GenerateProtobufUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GenerateProtobufUtils.java index df000cc2..8bbf3ff6 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GenerateProtobufUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GenerateProtobufUtils.java @@ -21,7 +21,6 @@ import com.zfoo.protocol.generate.GenerateOperation; import com.zfoo.protocol.generate.GenerateProtocolDocument; import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.IProtocolRegistration; -import com.zfoo.protocol.registration.ProtocolAnalysis; import com.zfoo.protocol.registration.ProtocolRegistration; import com.zfoo.protocol.registration.field.*; import com.zfoo.protocol.serializer.reflect.*; @@ -122,7 +121,7 @@ public abstract class GenerateProtobufUtils { for (var protos : xmlProtobuf.getProtos()) { for (var protocol : protos.getProtocols()) { var protocolClass = Class.forName(protocol.getLocation()); - var protocolId = ProtocolAnalysis.getProtocolIdByClass(protocolClass); + var protocolId = ProtocolManager.getProtocolIdByClass(protocolClass); var protocolRegistration = ProtocolManager.getProtocol(protocolId); if (allGenerateProtocols.contains(protocolRegistration)) { @@ -189,7 +188,7 @@ public abstract class GenerateProtobufUtils { for (var protocol : protos.getProtocols()) { var protocolClass = Class.forName(protocol.getLocation()); - var protocolId = ProtocolAnalysis.getProtocolIdByClass(protocolClass); + var protocolId = ProtocolManager.getProtocolIdByClass(protocolClass); var protocolRegistration = ProtocolManager.getProtocol(protocolId); var protocolDocument = GenerateProtocolDocument.getProtocolDocument(protocolId);