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);