3

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

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

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

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

4

3 回答 3

4

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

于 2008-10-03T19:30:45.640 回答
1

你可以看看使用方面。Spring 甚至有一个您可以使用的AOP扩展。

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

于 2008-10-03T17:11:34.937 回答
0

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

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

我怀疑您的意思是“我希望某些数据可用于所有视图”。

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

诚然,我并不完全熟悉 Spring MVC 的做事方式,但是您尝试实现的更详细的示例可能允许进行更明智的讨论。

于 2008-10-05T15:06:10.680 回答