能否控制Java中生成的Protobuf类的可见性?
Java下将Protobuf生成类设为private的可行方案
官方protoc编译.proto生成Java类时,默认所有类都是public,目前没有直接的编译参数支持修改可见性,不过可以通过以下几种变通方式实现需求:
自定义代码生成插件
基于Protobuf的插件机制,修改官方Java代码生成器的逻辑,在生成类定义时将public修饰符替换为private。这种方式需要你了解protoc插件的开发(基于Google CodeGenerator API),开发成本较高,但能从根源上实现自定义的类可见性控制,适合长期需求。字节码修改工具批量处理
使用ASM、ByteBuddy这类字节码操作库,在编译完成后对生成的.class文件进行批量修改,将类的访问权限从public调整为private。这种方式无需修改.proto或生成逻辑,操作相对快捷,但每次重新生成Protobuf代码后都需要重复执行该处理步骤。包级私有封装(折中方案)
如果不需要严格的private类,只是想限制外部直接访问,可以把生成的Protobuf类放在独立包中,手动或通过工具将类的public修饰符改为包级私有(即去掉public),然后编写一个public的对外包装类,只暴露业务需要的接口。不过手动修改会被重新生成的代码覆盖,建议配合字节码工具自动化完成。
内容的提问来源于stack exchange,提问作者Schattennarr
相关产品推荐
相关产品推荐

