java如果没有@EnableMVC,该代码如何工作?
我有以下代码:
package biz.tugay.springJuly18.config;
/* User: koray@tugay.biz 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。阶级
package biz.tugay.springJuly18.config;
/* User: koray@tugay.biz 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: koray@tugay.biz 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并转到/test时,我将被重定向到koko。jsp。那么,在没有启用WebMVC的情况下,为什么这项功能可以正常工作呢
根据这个答案here不应该吗
这里是RootConfig。java
package biz.tugay.springJuly18.config;
/* User: koray@tugay.biz 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 {
}
# 1 楼答案
DispatcherServlet
有两个字段其值决定如何处理请求(以及其他事项)。当容器初始化
DispatcherServlet
时,这些字段被初始化并填充值。这些值来自您指定的上下文配置。如果您的上下文配置没有提供至少一个适当类型的值,DispatcherServlet
将使用一些默认值这些默认值包含在名为
DispatcherServlet.properties
的文件中,该文件与DispatcherServlet
位于同一个包中对于
HandlerMapping
,值(类名)为^{} 州的javadoc
换句话说,这个实现还使用带有
@RequestMapping
注释的方法然而,
AnnotationMethodHandlerAdapter
是不推荐的@EnabledWebMvc
而是注册一个^{