此代码如何在没有@EnableMVC的情况下工作?
我有这样的代码:此代码如何在没有@EnableMVC的情况下工作?
package biz.tugay.springJuly18.config;
/* User: [email protected] Date: 18/07/15 Time: 15:09 */
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
@SuppressWarnings(value = "unused")
public class MyWebAppInnit extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfigClass.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{ServletConfigClass.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
和ServletConfig.class
package biz.tugay.springJuly18.config;
/* User: [email protected] Date: 18/07/15 Time: 15:10 */
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@ComponentScan(basePackages = "biz.tugay.springJuly18.web")
public class ServletConfigClass {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver =
new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
}
最后一个控制器:
package biz.tugay.springJuly18.web;
/* User: [email protected] Date: 18/07/15 Time: 12:53 */
import biz.tugay.springJuly18.service.MyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class MyWeb {
@Autowired
private MyService myService;
@RequestMapping("/test")
public ModelAndView helloWorld() {
ModelAndView mv = new ModelAndView();
mv.addObject("message", myService.sayHello());
mv.setViewName("koko");
return mv;
}
}
当我部署这Tomcat和去/测试我将被重定向到koko.jsp。那么,为什么这个工作没有@EnableWebMvc?
根据此回答here它不应该?
这里是RootConfig.java
package biz.tugay.springJuly18.config;
/* User: [email protected] Date: 18/07/15 Time: 15:10 */
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "biz.tugay.springJuly18.service")
public class RootConfigClass {
}
的DispatcherServlet
有两个字段
/** List of HandlerMappings used by this servlet */
private List<HandlerMapping> handlerMappings;
/** List of HandlerAdapters used by this servlet */
private List<HandlerAdapter> handlerAdapters;
其值决定的请求将如何处理(除其他事项外)。当容器初始化DispatcherServlet
时,这些字段将被初始化并填充值。这些值来自您指定的上下文配置。如果您的上下文配置不提供至少一个适当类型的值,DispatcherServlet
使用一些默认值。
这些默认值包含在名为DispatcherServlet.properties
的文件中,该文件位于与DispatcherServlet
相同的包中。
对于HandlerMapping
,值(类名称)是
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
的AnnotationMethodHandlerAdapter
状态
的
HandlerAdapter
接口基于HTTP路径,HTTP方法和处理程序 方法映射的实现请求参数 通过RequestMapping
注释表示。
换句话说,该实现也使用用@RequestMapping
注释的方法。
然而,AnnotationMethodHandlerAdapter
是有利于RequestMappingHandlerAdapter
@EnabledWebMvc
弃用
在Spring 3.2,而不是注册一个
RequestMappingHandlerAdapter
,这是更为复杂的。
因此,如果我理解正确,不使用@EnableWebMvc将导致使用弃用的对象? –
@KorayTugay是的。 (除非你做'@ EnableWebMvc'手动做,即。注册一个'RequestMappingHandlerAdapter' bean。) –
很好的答案谢谢..我只是把注释,现在不用担心。 –
什么在'RootConfigClass'? –
@SotiriosDelimanolis对问题添加。 –