繁体   English   中英

没有@Controller声明的Spring MVC bean充当控制器

[英]Spring mvc bean acts as controller without @Controller declaration

谁能解释一下用@Controller声明一个类与(用@Scope声明它并在applicationContext.xml中定义一个bean)之间的区别。

这是我的情况。

方法1 :使用@Scope声明类,并在applicationContext.xml中添加bean定义

AbcController.java:

package my.app.controller;
    @Scope("singleton")
    @RequestMapping(value = "/abc")
    public class AbcController {
        @RequestMapping(value = "/simulate_abc", method = RequestMethod.GET)
        public String getFactorsForSimulate(ModelMap model) {
            model.addAttribute("Welcome to the simulations page");
            return "simulate_abc";
        }
    }

applicationContext.xml中

<bean id="abcController" class="my.app.controller.AbcController"/>

方法2 :使用@Controller声明类,并且applicationContext.xml中没有bean定义

package my.app.controller;    
@Controller
    @RequestMapping(value="/abc")
    public class AbcController {
           @RequestMapping(value = "/simulate_abc", method = RequestMethod.GET)
            public String getFactorsForSimulate(ModelMap model) {
                model.addAttribute("Welcome to the simulations page");
                return "simulate_abc";
         }
    }

在这里,这两种方法都给了我预期的结果(将我带到附加到模型的消息带到“ simulate_abc.jsp”)。 我想了解,为什么Approach1不会失败? 尽管它具有RequestMapping,但由于未将其声明为控制器,因此如何解析“视图”? 我感觉Approach1是错误的,因为它不满足弹簧“ MVC”中的“ C”部分。

对于RequestMappingHandlerMapping来说没有什么区别,只需查看RequestMappingHandlerMapping#isHandler() ,这两个注释都可以使用。

但是,对于诸如AbstractControllerUrlHandlerMapping层次结构中的其他HandlerMappings@Controller注释可以解决此问题。

请注意,在Spring MVC中,Controller是具有HandlerMapping映射到请求的任何方法的 任何类 还需要一个HandlerAdapter来执行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM