首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 純 Java 配置全攻略:告別 web.xml 與 XML

     編輯:Java 綜合教學

為什麼選擇 Java Config?

Servlet 3.0+ 規範支援 ServletContainerInitializer 機制,Spring 3.1 引入 WebApplicationInitializer,配合 @Configuration、@EnableWebMvc、@ComponentScan 等註解,完全可以用類型安全、IDE 友好、易重構的 Java 代碼替代冗長的 XML。優勢顯而易見:

  • 編譯期檢查拼寫錯誤,重構自動重命名
  • 條件化裝配(@Conditional)靈活控制 Bean 裝載
  • 統一管理屬性來源(YAML/Properties/環境變量)

完整配置三步走

Step 1:Maven 依賴

<dependencies>
    <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.30</version></dependency>
    <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency>
    <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>
</dependencies>
<build>
    <plugins>
        <plugin><artifactId>maven-war-plugin</artifactId><version>3.3.2</version>
            <configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration>
        </plugin>
    </plugins>
</build>

Step 2:啟動類替代 web.xml

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override protected Class<?>[] getRootConfigClasses() { return new Class[]{RootConfig.class}; }
    @Override protected Class<?>[] getServletConfigClasses() { return new Class[]{WebConfig.class}; }
    @Override protected String[] getServletMappings() { return new String[]{"/"}; } // 映射根路徑
}

Step 3:Web 層配置

@Configuration
@EnableWebMvc
@ComponentScan("com.example.controller")
public class WebConfig implements WebMvcConfigurer {
    @Bean public ViewResolver viewResolver() {
        InternalResourceViewResolver r = new InternalResourceViewResolver();
        r.setPrefix("/WEB-INF/views/"); r.setSuffix(".jsp"); return r;
    }
    @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer c) { c.enable(); }
    // 靜態資源映射(可選)
    @Override public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/static/");
    }
}

Step 4:業務層配置

@Configuration
@ComponentScan(basePackages = "com.example", excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = EnableWebMvc.class))
public class RootConfig { /* DataSource、Service、Repository 等 */ }

Controller 與視圖

@Controller
public class HomeController {
    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("message", "Hello Spring MVC Java Config!");
        return "home"; // 對應 /WEB-INF/views/home.jsp
    }
}

進階技巧

  • 多環境配置:@Profile("dev") + @PropertySource 載入 application-dev.yml
  • 全局異常處理:@ControllerAdvice + @ExceptionHandler
  • 攔截器註冊:實現 WebMvcConfigurer.addInterceptors()
  • CORS 跨域:WebMvcConfigurer.addCorsMappings()

常見坑點

  1. maven-war-plugin 必須設 failOnMissingWebXml=false,否則打包報錯。
  2. ComponentScan 去重:RootConfig 掃描全包但排除 @EnableWebMvc,WebConfig 只掃 Controller,避免 Bean 重複註冊。
  3. 靜態資源 404:必須調用 configureDefaultServletHandling(configurer -> configurer.enable()) 轉發給容器默認 Servlet。

總結

純 Java 配置讓 Spring MVC 專案結構更清晰、維護成本更低。掌握 AbstractAnnotationConfigDispatcherServletInitializer 三個核心方法與 WebMvcConfigurer 擴展點,即可構建現代化、零 XML 的 Web 應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved