Spring框架MVC基础控制器方法

7

我有许多控制器方法分布在许多类中。每个方法都需要一个Model对象,并且我的所有方法都会将一些共享属性填充到模型中(主要是控制导航栏的显示)。有没有办法将一个“基础”方法插入到Spring中?我想要一个方法来填充我的共享属性,然后进入特定的控制器方法(或反过来)。有人知道如何做到这一点吗?

3个回答

3
看起来似乎HandlerInterceptor可能是一个不错的选择。
它有点像AOP——您可以定义一个具有PreHandlePostHandle方法的类,并配置它将在哪些请求上运行。在您的情况下,您可能需要使用PostHandle,因为这将为您提供对ModelAndView的访问权限,以便您可以使用共享项填充它。

2

在Spring和Spring MVC中,有几个扩展点可供使用:


1
如果您正在实现的逻辑是与特定视图没有普遍耦合的横切关注点,我建议使用拦截器而不是创建控制器功能层次结构。控制器层次结构可能会使处理异常映射和会话数据管理/生命周期等问题变得困难。此外,视图层是您最有可能需要根据不断变化的客户需求随时更改的地方,因此未来可扩展的功能层次结构是不可能实现的。 org.springframework.web.servlet.HandlerInterceptor具有“postHandle”方法,可以让您访问请求、处理请求的控制器和ModelMap。那应该就是您所需要的全部内容。如果您需要一些来自控制器的控制,您可以始终向其中添加元数据,指示例如它使用哪个类的标头(然后在将来当您不得不更改它时,它只是一个xml或注释中的一个字符串,而不是更改您继承的类以及所有相关内容)。
您可以像这样打开它们:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <list>
            <bean class="a.package.MyHandlerInterceptor"/>
        </list>
    </property>
</bean>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接