当前位置: 首页 > 知识库问答 >
问题:

为什么spring boot应用程序不需要@EnableWebMvc

娄弘
2023-03-14

所以我写了一个小应用程序,为了熟悉基础知识,我使它尽可能简单。我用Config.java文件做了一个简单的mvc应用程序,当我认为现在应用程序应该抛出一个错误时,它实际上是有效的。

这是我的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency> 
        <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

我的配置文件只有一个视图解析器:

package com.example.demo;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;

import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;


@Configuration
public class DemoConfig {

    @Bean
    public ViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver bean = new InternalResourceViewResolver();
        bean.setViewClass(JstlView.class);
        bean.setPrefix("/templates/");
        bean.setSuffix(".html");
        return bean;
    }
}

主文件

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

最后是控制器类:package com。实例演示。控制器;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class TestController {
    @GetMapping(value="home")
    public String home() {
        return "home";
    }
}

一个pplication.properties

server.servlet.context-path=/demo

这就是整个应用程序,我记得我需要mvc:annotation-driven。xml或@enablewebmvc使@getmapping@controller工作,但我的应用程序完全工作。它怎么能不出错呢?

共有3个答案

段成益
2023-03-14

因为您使用的是引导应用程序,@SpringBootApplication此注释默认启用注释驱动应用程序(mvc:注释驱动)。您不需要提供配置。请阅读@SpringBootApplicationhttps://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-using-springbootapplication-annotation.html.

阙繁
2023-03-14

在Spring Boot中,你会得到“一切正常”的表现
Spring靴不是Spring:这比Spring更进一步
实际上,Spring Boot尽可能减少了允许应用程序工作所需的配置
为使应用程序成为Spring驱动的应用程序而引入的@SpringBootApplication注释就是一个很好的例子
除此之外,Spring Boot还提供了一些启动包依赖项,以及Spring配置。

在您的例子中,正如您声明的spring boot starter web是一个依赖项一样,spring MVC配置和其他与使用spring的web应用程序相关的内容都已设置
文件确实说明:

11.3.2@EnableAutoConfiguration注释

由于spring boot starter web添加了Tomcat和spring MVC,因此自动配置假定您正在开发一个web应用程序,并相应地设置spring。

欧桐
2023-03-14

@SpringBootApplication是一个方便的注释,添加了以下所有内容:

  • @配置将类标记为应用程序上下文的bean定义源。
  • @EnableAutoConfigance告诉Spring Boot根据类路径设置、其他bean和各种属性设置开始添加bean。
  • 通常情况下,您会为Spring MVC应用添加@EnableWebMvc,但是当Spring Boot在类路径上看到sping-webmvc时,它会自动添加它。这将应用程序标记为Web应用程序,并激活关键行为,如设置DispatcherServlet。
  • @ComponentScan告诉Spring在Hello包中查找其他组件、配置和服务,允许它查找控制器。
 类似资料:
  • 问题内容: 该单页应用(SPA)已经到了我们。随之而来的还有很多新功能,例如路由,客户端页面生命周期,MVC模式,MVVM模式,MV *模式等等。还有一些Javascript模式,例如AMD模式,Singleton,Facade,.. 还开发了许多SPA框架和库。我们可以在互联网上找到它的一些内容。它们是AngularJs,Reactjs,BackboneJs,DurandalJs 等等,以及许多

  • 问题内容: 这适用于Applet,Servlet,Midlet等的子类。 为什么他们不需要?如果我想创建一个从或类似的类开始,那是不好的设计,还是我将如何去做? 问题答案: 它实际上是好的设计,但并不明显,您想要执行的操作没有效果,因此有点反常。 这些类型的应用程序生活在容器中,因此,它们的切入点由这些容器必须遵守的标准确定。这些标准的设计者选择不将入口点称为主要入口点。您可以将功能放在重写的方法

  • 我试着去理解Spring是怎么跟所有的事情联系在一起的。然而,我不明白为什么在单元测试spring代码时使用mockito?spring不能处理与mockito相同的DI吗?莫基托贡献了什么是纯泉所不可能做到的? 澄清:我的想法是,我可以使用一个不同的应用程序上下文来进行测试,在这里创建我需要的存根bean作为虚拟对象。

  • 问题内容: 我正在尝试了解如何在Spring应用程序中使用JBoss EAP6。我有一个示例OpenShift应用程序,它包含一个文件。 我找到了有关此文件的一些文档,但是我不清楚为什么以及何时应该在Spring应用程序中使用这些文件。内容如下: 为什么需要声明对模块的依赖关系?JBoss范例中的模块是什么?没有这个xml文件是否可以生存? 问题答案: 只要您的应用程序没有任何类加载问题,就不需要

  • 问题内容: 我正在用查询执行ajax请求,想知道为什么我的响应已经是JS对象。 如果我做一个 ‘obj’为null,但是我可以将’response’用作js对象数组。 这不是真正的问题,但是我想了解这种行为。 谢谢 问题答案: 当您进行AJAX调用并指定dataType JSON时,就会发生这种情况jQuery会在响应中为您调用jQuery.parseJSON。实际上,您可以根据数据类型指定要调用

  • 我正在学习Spring框架,但我不能理解注释的确切含义以及应该对哪些类进行注释。在Spring Boot文档中,说应用程序类应该是class。 Spring Boot支持基于Java的配置。虽然可以使用XML源调用SpringApplication.run(),但我们通常建议您的主要源是@Configuration类。 在尝试了解时,我发现用注释类表明Spring IoC容器可以使用该类作为bea