在将视图变量封装到POJO类并将其提供给模板处理器的过程中,是否可以使用自定义注释限制模板引擎可以调用的方法?由于继承,无法通过私有方法限制可见性。
我在Spring MVC中使用FreeMarker。
模板处理器从控制器接收POJO类:
model.addAttribute("view", new SamplePOJO(this));
SamplePOJO类:
public final class SamplePOJO extends View
{
public SamplePOJO(MasterController<?> _inject)
{
super(_inject);
}
@CustomAnnotationOnValidMethods
public String getValid_value()
{
return "valid call";
}
@Override
public String getInvalid_value()
{
return "invalid call";
}
}
模板:
<p>Valid invocation: ${view.valid_value}</p>
<p>Also valid but I want this to be impossible: ${view.invalid_value}</p>
答案 0 :(得分:0)
是的,DefaultObjectWrapper
(或任何其他BeansWrapper
子类)设置methodAppearanceFineTuner
(https://freemarker.apache.org/docs/api/freemarker/ext/beans/MethodAppearanceFineTuner.html)。在MethodApperanceFineTuner
实施中,您可以通过调用MethodAppearanceDecision.setExposeMethodAs(null)
来隐藏方法。
您可以在配置FreeMarker的地方注入MethodApperanceFineTuner
对象,例如,创建DefaultObjectWrapperBuilder
,调用其setMethodAppearanceFinteTuner(MethodAppearanceFinteTuner)
方法,然后调用build()
,并将结果传递给{{1 }}