Spring @ RequestMapping-annotated方法可以是静态的吗?

时间:2015-07-22 23:07:48

标签: java spring-mvc inheritance controller

这是previous question的后续问题。

根据我的理解,一个带有@Controller注释类的@RequestMapping - 带注释的方法无法成功继承另一个,因为Spring无法识别它们都映射到相同的方法。即使Spring认识到它们是同一个实例,它也无法决定使用两个控制器bean的哪个实例来调用该方法。

但静态方法是独立于类的任何实例而调用的,并且子类不携带父级静态成员的副本。制作我的所有@RequestMapping - 带注释的方法static(至少在父类上)可以解决这个问题,这就引出了我的问题:

public static方法可以与类@Controller和方法@RequestMapping一起使用吗?它的行为与非静态方法大致相同*?

*我知道static方法自然无法访问实例成员,但控制器通常应该以这样的方式实现,即无论如何都没有任何实例变量。如果它们是静态方法,我正在处理的所有方法都将完全相同,只要框架允许它。

1 个答案:

答案 0 :(得分:1)

在Spring 3.2.X中它适用于我。虽然,控制器通常在其实例上有数据成员,但它们通常是作为服务的自动装配实例。所以我想知道你是否误解了Spring框架的整体设计模式。

我无法想到使用静态方法的任何实际好处,控制器实例已经存在,所以即使你让控制器拥有所有静态方法,它仍然会被实例化。我认为实例调用开销是微不足道的,并且在性能方面会在噪声中丢失。