我正在使用Spring MVC构建应用程序。我想对应用程序中的每个Controller对我的模型进行某些更改。特别是,我想在模型中插入一些额外的数据,这些数据将出现在应用程序的所有页面中。

我可以通过以下几种方式做到这一点:只需在每个Controller的末尾添加数据,使用Model的子类添加我的额外数据,使用包装我的Model的ModelAndView的子类,使用包装了VelocityView的子类使用前的模型......我确定还有其他选择。

但我有一种“优雅”的感觉。约束:我不想在每个Controller中编写代码,我希望在中定义此行为一个只有一个的地方。理想情况下,它将由我的IOC bean配置文件控制。

有没有人建议如何优雅地实现这一目标?

有帮助吗?

解决方案

方面是一种很好的方法,但是Spring MVC使它更容易 - 你可以定义一个 HandlerInterceptor 将在每次处理请求之前或之后调用。在HandlerInterceptor postHandle方法中(在实现HandlerInterceptor接口的类中),您可以将数据添加到ModelAndView中。您可以定义应在配置文件中截获哪些处理程序。

其他提示

您可以查看使用Aspects。 Spring甚至可以使用 AOP 扩展程序

简而言之,一个方面允许您定义一次代码然后将其“编织”。在编译类或类加载器加载它们时进入类。它是相对先进的东西,并不是新程序员最直观的东西,但它的目的是解决你所指的问题。

我可能错了,但我怀疑你可能错误地描述了你的要求。

您似乎在说'我希望将某些数据添加到我的模型中,适用于所有控制器'。

我怀疑你的意思是'我希望某些数据可用于所有观看'。

如果我的怀疑是正确的,那么将数据添加到您的模型中会污染您的模型并违反单一责任原则。如果要将相同的数据添加到多个模型中,则尤其如此。请注意,您不仅要将模型用作数据的方便“载体” - 数据与模型实际上没有任何关系。

不可否认,我并不完全熟悉Spring MVC的做事方式,但是你想要实现的更详细的例子可以让我们进行更明智的讨论。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top