浏览 2408 次
锁定老帖子 主题:CommonTemplate配置方案确定
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-11
http://javatar.iteye.com/blog/139420
根据前几天的思考:CommonTemplate(http://www.commontemplate.org)的配置方案确定, 采用全setter方式配置,以保持可以用任意IoC容器进行配置, 但为了不依赖于任何IoC容器使用组件, 在util包中实现了一个简单的BeanFactory,作为默认IoC容器实现: org.commontemplate.util.PropertiesBeanFactory (实现的是上面思考帖子的第二种方案) 采用properties作为配置,所以需遵循java.util.Properties的所有规则,如:# ! = :等符号需转义等 1.以()结尾表示创建实例, 实例可以注入属性:使用实例的key作为前缀,点号后跟其属性 如: templateCache=org.commontemplate.standard.cache.FIFOCache() templateCache.maxSize=1000 前提是FIFOCache中有一个setMaxSize(int)注入函数 2.以[]结尾表示List<Object>,并以其value作为前缀搜索List的项 如: templateNameFilter=templateNameFilters[] templateNameFilters[100]=org.commontemplate.standard.filter.TemplateNameRelativer() templateNameFilters[200]=org.commontemplate.standard.filter.TemplateNameCleaner() templateNameFilters[200].maxLength=10 下标号用来唯一识别及排序,必需为数字,大小任意。 通常下标号都留一点间距,如上面的100,200, 这样当子级配置继承当前配置时,可以让其配置的templateNameFilter项插在已有的列表项中间。 如子配置中有: templateNameFilters[101]=com.xxx.YYYFilter() 就会排序到上面配置的中间。 3.以{}结尾表示Map<String, Object>,并以其value作为前缀搜索Map的项 如: directiveHandlers=directive{} directive{if}=org.commontemplate.standard.directive.condition.IfDirectiveHandler() directive{for}=org.commontemplate.standard.directive.iteration.ForeachDirectiveHandler() directive{for}.statusName=for 下标{}中名称若有符号,均作为字符串。 4.基本类型处理与Java相似 null, true, false为关键字,表示特殊值。 以数字开头的为Number,识别后缀L,F,D,S 以单引号括起的为Character 以双引号括起的为String,如:"xxxx" 5.其它情况均作为String处理, 但若要输出特殊标识的String,必需用双引号,如:"true" 6.采用@extends作为配置继承专用属性,可以多继承,用逗号分隔各父级配置文件, 如: @extends=org/commontemplate/standard/commontemplate-standard.properties 整个配置的设计思想是,尽可能把所有设置项行级展开,以便于子级配置可以轻松的覆盖父级的所有配置细节, 如:用户可以写一个commontemplate-my.properties: @extends=org/commontemplate/standard/commontemplate-standard.properties directive{for}.statusName=for 现在只能用List<Object>和Map<String, Object>作为容器类进行配置,以后会改进加入其它容器。 如果完善后可以考虑抽取出来单独作为一个发行包。 如果各位有好的建议,不妨讨论下。 另,可参见CommonTemplate的标准配置: org/commontemplate/standard/commontemplate-standard.properties 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-15
改进:
1.以<>结尾表示Set<Object>,并以其value作为前缀搜索Set的项, 如: sequences=sequence<> sequence<quarter>=Spring,Summer,Autumn,Winter sequence<month>=January,February,March,April,May,June,July,August,September,October,November,December sequence<week>=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday <>内的名称只用来唯一标识,Set结果中不保留, 2.以.class结尾表示创建类元,将以.class之前的名称反射得Class对象, 如: tagClass=org.commontemplate.side.taglib.IfTag.class 3.以.static结尾表示通过静态字段, logger=org.commontemplate.core.Logger.DEFAULT.static 4.以().static结尾表示通过静态工厂方法获取对象实例, logger=org.commontemplate.core.Logger.getDefaultLogger().static |
|
返回顶楼 | |