2015-07-20 75 views
0

我有这样的代码:此代码如何在没有@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 { 
} 
+0

什么在'RootConfigClass'? –

+0

@SotiriosDelimanolis对问题添加。 –

回答

4

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状态

的Javadoc

HandlerAdapter接口基于HTTP路径,HTTP方法和处理程序 方法映射的实现请求参数 通过RequestMapping注释表示。

换句话说,该实现也使用用@RequestMapping注释的方法。

然而,AnnotationMethodHandlerAdapter是有利于RequestMappingHandlerAdapter

@EnabledWebMvc弃用

在Spring 3.2,而不是注册一个RequestMappingHandlerAdapter,这是更为复杂的。

+0

因此,如果我理解正确,不使用@EnableWebMvc将导致使用弃用的对象? –

+0

@KorayTugay是的。 (除非你做'@ EnableWebMvc'手动做,即。注册一个'RequestMappingHandlerAdapter' bean。) –

+0

很好的答案谢谢..我只是把注释,现在不用担心。 –

相关问题