一种基于Spring的java程序常量维护思路

2010-6-18文字大小:大中小

在编写程序的时候,总是不可防止的须要运用一些常量,甚至很多的常量。咱们可以对常量执行 一个很基本的分类:

记忆性常量:首要出于程序结构上的思虑而设定的常量。譬如为了防止一个没有字面意思的魔法数,或者防止拼写简单出错,或者不容记得的内容。

业务性常量:示意一个业务上的一个特定业务实体的属性或属性值。

很多的时候,一个业务性常量很多时候也是一个记忆性常量。

在一个大型项目中,参与的人员和代码数目通常都会比较多,没有好的维护策略,常量的运用往往想入混乱中。譬如重复定义,其维护的值甚至还不一致,以外覆盖;譬如仅仅为了运用某个常量,而引入某个包或者类,由此可能引出模块间的循环依靠等。

良好的设计结构,以及严格的开发纪律基本上可以处理上述疑问。除了有时的确是不可防止的出现以上疑问外,有时一些所谓的业务常量只有在部署期间或同别的系统集成是才能取得。所以有必要进一步的探讨常量的维护手段。

记得在JavaEye上看到一篇关于Spring属性注入的文章,灵机一动,不是恰好可以用来处理这个疑问吗?所谓属性注入,意思是指将配置信息写在Properties文件中,通过IOC容器透明的注入。

这么设想下,假如常量结尾 都可以用配置文件配置,那么就可以处理 “业务常量只有在部署期间或同别的系统集成是才能取得 ”的疑问,假如同时还可以透明的宣称运用常量,那么几乎所有的疑问就圆满了:

不害怕重复定义不正确

消除有常量引用惹起的循环引用

提供从部署期覆盖编译期的灵活性

运用 Spring的扩展名称空间和Java5的Annotation语法,咱们可以整理出以以下思路

定义一个Annotation类

实现一个Annotation的Processor

配置Processor Bean

实现流程大致如下:

一、Annotation

@Target({ElementType.FIELD,ElementType.TYPE})    @Retention(RetentionPolicy.RUNTIME)    public @interface Properties {    
String name() default "";        String value() default "";        String namePrefix() default "";      
String namePostfix() default "";    }