首页 一种基于Spring的java程序常量管理思路

一种基于Spring的java程序常量管理思路

举报
开通vip

一种基于Spring的java程序常量管理思路一种基于Spring的java程序常量管理思路 在编写程序的时候,总是不可避免的需要使用一些常量,甚至很多的常量。我们可以对常量进行一个很简单的分类: 记忆性常量:主要出于程序结构上的考虑而设定的常量。譬如为了避免一个没有字面意思的魔法数,或者避免拼写容易出错,或者不容记住的内容。 业务性常量:表示一个业务上的一个特定业务实体的属性或属性值。 很多的时候,一个业务性常量很多时候也是一个记忆性常量。 在一个大型项目中,参与的人员和代码数量通常都会比较多,没有好的管理策略,常量的使用往往想入混乱中。譬如重复定义,...

一种基于Spring的java程序常量管理思路
一种基于Spring的java程序常量管理思路 在编写程序的时候,总是不可避免的需要使用一些常量,甚至很多的常量。我们可以对常量进行一个很简单的分类: 记忆性常量:主要出于程序结构上的考虑而设定的常量。譬如为了避免一个没有字面意思的魔法数,或者避免拼写容易出错,或者不容记住的内容。 业务性常量: 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示一个业务上的一个特定业务实体的属性或属性值。 很多的时候,一个业务性常量很多时候也是一个记忆性常量。 在一个大型项目中,参与的人员和代码数量通常都会比较多,没有好的管理策略,常量的使用往往想入混乱中。譬如重复定义,其维护的值甚至还不一致,以外覆盖;譬如仅仅为了使用某个常量,而引入某个包或者类,由此可能引出模块间的循环依赖等。 良好的设计结构,以及严格的开发纪律基本上可以解决上述问题。除了有时的确是不可避免的出现以上问题外,有时一些所谓的业务常量只有在部署期间或同别的系统集成是才能获得。所以有必要进一步的探讨常量的管理手段。 记得在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 ""; } 二、Processor public class AnnotationPropertiesBeanPostProcessor extends PropertyPlaceholderConfigurer implements BeanPostProcessor, InitializingBean { private java.util.Properties pros; private String namePrefix = ""; private String namePostfix = ""; public void setEnabledClassList(Class[] enabledClassList) { this.enabledClassList = enabledClassList; } public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { HandlePropertiesAnnotatedBean(bean, bean.getClass()); return bean; } private void HandlePropertiesAnnotatedBean(Object bean, Class asClass) throws SecurityException { if( isHandleInheritance(asClass.getSuperclass()) ){ HandlePropertiesAnnotatedBean(bean, asClass.getSuperclass()); } Field[] fields = asClass.getDeclaredFields(); for (Field field : fields) { if (support(field.getType())) { handleField(bean, field, defaultIsRequired(bean, asClass)); } } } private void handleField(Object bean, Field field, boolean defaultIsRequired) { if (isProhibited(field)) { return; } if (defaultIsRequired || isRequired(field)) { try { ReflectionUtils.makeAccessible(field); field.set(bean, getPropertyValue(field)); } catch (Exception ex) { Logger.getLogger(AnnotationPropertiesBeanPostProcessor.class.getName()).log(Level.S EVERE, null, ex); } } } ...... 三、配置 bean Xml代码 四、使用实例 @Properties(namePrefix="ddd") public class Config { @Properties(name="author") private String author; private String tvalue; @Properties(value="default name",namePrefix="ooo") private String tname; private String nonValue; // getter and setter } 五、示例Properties文件内容 Xml代码 dddauthor=用的是 class 级别的 prefix oootname=用的是 field 级别的 prefix dddnonValue=用sd
本文档为【一种基于Spring的java程序常量管理思路】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_654168
暂无简介~
格式:doc
大小:17KB
软件:Word
页数:0
分类:互联网
上传时间:2017-09-25
浏览量:12