抽象类可通过protected成员变量共享基础设施,如RedisTemplate;支持@Autowired注入和@PostConstruct初始化;封装元数据操作为受保护方法;定义MetadataStore契约并由子类实现具体存储。

抽象类的成员变量可以作为子类共享的基础设施,比如统一的元数据操作对象。只要在抽象父类中声明并初始化(或由框架注入),子类继承后就能直接使用,无需重复定义或注入。
用 protected 声明可继承的成员变量
成员变量需设为 protected(而非 private),确保子类能直接访问。例如:
-
不推荐:
private RedisTemplate redisTemplate;—— 子类无法访问 -
推荐:
protected RedisTemplate—— 子类可直接调用redisTemplate; redisTemplate.opsForValue()等方法
在抽象类中完成初始化或依赖注入
Spring 环境下,可在抽象类中用 @Autowired 或 @Resource 注入通用组件,子类自动获得已配置实例:
- 父类中声明:
@Autowired protected RedisTemplateredisTemplate; - 子类中直接使用:
redisTemplate.delete(key);,无需再写注入语句 - 若涉及数据库连接、同步上下文等元数据服务,也可在抽象类构造或
@PostConstruct中统一初始化
封装元数据操作逻辑到抽象方法或模板方法
把共性行为(如生成元数据键、校验版本号、更新时间戳)抽成受保护方法,子类按需复用或扩展:
- 父类提供:
protected String buildMetadataKey(String scope, String id) { return scope + ":meta:" + id; } - 子类调用:
String key = buildMetadataKey("device", "d1001"); - 若需定制逻辑,子类可重写该方法,不影响其他子类
配合抽象基类统一管理元数据生命周期
参考 Microsoft.Synchronization.MetadataStorage 设计思路,抽象类可定义元数据存储契约,例如:
- 声明抽象字段:
protected MetadataStore metadataStore; - 提供初始化模板方法:
initMetadataStore()(由子类决定用 SqlMetadataStore 还是 FileMetadataStore) - 子类只需实现具体创建逻辑,其余读写、事务、清理等操作均由父类封装调用










