彻底摆脱配置文件 二 (开源项目zkconfigutil resolve自动生成)

原创
2014/03/01 01:26
阅读数 980

    本人一直想把zkconfigutil推向开源,虽现在不是很完善,但也从未停止前进的步伐,最近一直在想如何解决大量resolve的编写问题,写个eclipse插件看来是比较好的做法,JET也不好弄,所以由于时间限制,短期内没有过多时间去研究eclipse插件(虽对osgi还算熟悉),也在博客中发表过想找合作伙伴开发一个eclipse插件,但也不是很容易实现,所以产生了这个模版,这个实现相对比较容易,但也不能说是万能的,有弊端,但也可以完美满足非特殊情况,请您慢慢往下欣赏!!


resolve template文件在工程template下,网络地址:template resolve


    这个模版实际上就是eclipse editor template,是个xml文件,您可以在Window -> Preferences -> Java -> Editor -> Templates

,选择import导入该xml即可

    到底什么是resolve,为什么需要resolve,请您看这篇博客zkconfigutil详解

    这里假设您看过了zkconfigutil的使用或原理实现,我们知道,想对某个class的某个属性实现zookeeper配置,我们需要为每个字段都写一个自己的resolve,这个工作量非常大,并重复性严重,那么有了这个工具后,假如我有个 Demo class

@TypeZkConfigurable(path = "/test/jerry", server = "localhost:2181", useOwnZkServer = false)
public final class Demo {

	@FieldZkConfigurable(resolve = DemoF1Resolve.class, dynamicUpdate = true)
	public static String F1 = "F1";

	@FieldZkConfigurable(resolve = DemoF2Resolve.class, dynamicUpdate = true)
	public static String F2 = "F2";

	@FieldZkConfigurable(resolve = DemoF3Resolve.class, dynamicUpdate = true)
	public static Boolean F3 = false;
   }

    现在我想写F2字段的DemoF2Resolve.class,您可以在这个demo的空白位置,写个F2(必须与相应属性的名字相同,不同也可以,自己再调整),然后按eclipse的提示快捷键,一般为 ALT+/,在提示列表中会看到resolve,选择这个resolve,eclipse就会根据resolve_template.xml生成DemoF2Resolve.class了,如果您的这个属性是string类型,那么接下来就不需要做任何事情,直接可以使用

代码实例如下:

    private static final class DemoF2Resolve extends AbstractResolve {

		@Override
		public String resolve() {
			// TODO Auto-generated method stub
			return Demo.F2.toString();
		}

		@Override
		public void dResolve(String src) {
			// TODO Auto-generated method stub
			Demo.F2 = src;
		}

	}

    ---------------------------------------------------------------------------

    添加通用resolve生成模板

cast_resolve_template.xml文件在工程template下,地址:cast_resolve_template

    自动生成resolve如下:

    public static final class DemoF3Resolve extends AbstractResolve {

		@Override
		public String resolve() {
			// TODO Auto-generated method stub
			return Demo.F3.toString();
		}

		@Override
		public void dResolve(String src) {
			// TODO Auto-generated method stub
			Demo.F3 = Demo.F3.getClass().cast(src);
		}

	}

时候不早了,写的比较仓促,有些地方可能说的不是很清晰,希望大家有问题或有更好的实现、idea,可以在下方留言或直接联系兄弟


email:search.jerry@gmail.com


jerry 于2014-03-01 凌晨

展开阅读全文
0
9 收藏
分享
加载中
更多评论
打赏
0 评论
9 收藏
0
分享
返回顶部
顶部