2015-07-20 160 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

很好的答案謝謝..我只是把註釋,現在不用擔心。 –

相關問題