Hike News

彻底摆脱配置文件 四(基于反射的通用resolve详解)

之前虽然提供了生成通用resolve的template,改善了代码开发的代价,但生成的resolve过多,导致代码长度过度增长,使用ReflectResolve便可解决这个问题。

目前resolve从使用方式上有两种情况:

1
2
3
4
5
6
7
@FieldZkConfigurable(resolve = DemoResolve.DemoF1Resolve.class, dynamicUpdate = true)
public static String F1 = "F1"
@FieldZkConfigurable(dynamicUpdate = true)
public static String F2 = "F2";
@FieldZkConfigurable(dynamicUpdate = true)
public static Boolean F3 = false;

第一种,明确指定resolve,采用这种方式会比较灵活,一对一对应字段F1,逻辑可以自己方便控制,甚至可以加上一些逻辑而不是简单的赋值。

第二种,没有指定resolve,采用默认的ReflectResolve,这种方式减少代码的编写,及缓解代码的膨胀,这个resolve,采用反射机制,所以其有一定的局限性,但基本可以满足90%的需求,目前支持字段类型为:String、Long、Integer、Float、Double、Short、Boolean、及自定义类型VisualType(VisualType的子类),从本人测试的效果看,同样非常稳定。

第二种方式在使用上大大简化了开发者的开发工作,如果您的配置不需要自动动态更新,dynamicUpdate=true都可以去掉,最后只剩下一个简单的注解,即可实现属性的zookeeper配置。

1
2
@FieldZkConfigurable
public static Boolean F4 = true;

为了满足大多数用户的需求,除了java中可以使用valueOf方法反序列化的类型之外,还提供了VisualType类型,从名字上看大家应该明白了,就是“可视化类型”,只要您的属性类型继承自VisualType,并重写valueOf和toString方法也可通过ReflectResolve实现zookeeper配置当然也可动态更新。

最新代码可以从项目主页获取,欢迎大家试用,并提供宝贵意见,当然也非常愿意您的加入!!!


jerry 于 2014-04-02 13:08

© 2017 jerry's blog All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero