对象包装

当往容器中添加一些对象时,可以是任意java对象类型的参数,而不一定是TemplateModel。这是因为模板实现会默默地用合适的TemplateModel对象来替换原有对象。比如向容器中加入一个String,也许它将被替换为一个SimpleScalar实例来存储相同的文本。

至于什么类型的Java对象可以被替换,又使用什么样的TemplateModel来实现,它可以被实现的容器自身来控制,也可以委派给ObjectWrapper的一个实例。

ObjectWrapper是一个接口,其中只定义了一个方法:TemplateModel wrap(java.lang.Object obj)。可以传递一个object类型的对象,它会返回对应的TemplateModel对象,如果不行则抛出TemplateModelException一场。替换原则是在ObjectWrapper的实现类中编码实现的。

最重要的ObjectWrapper实现类是FreeMarker核心包提供的:

 

ObjectWrapper.DEFAULT_WRAPPER:

它使用SimpleScalar替换String,SimpleNumber替换Number

SimpleSequence来替换List和数组,

SimpleHash来替换Map,

TempalteBooleanModel.true和TempalteBooleanModel.false来替换boolean

 

ObjectWrapper.BEANS_WARPPER:它可以通过反射java机制来获取java bean属性和其他任意对象类型的成员变量

 

 

 

 

 

 

 

posted on 2016-06-06 14:12  Sharpest  阅读(154)  评论(0编辑  收藏  举报