傳統 Spring 專案充斥著 web.xml、applicationContext.xml、spring-mvc.xml 等 XML 配置,不僅繁瑣且易出錯。Spring 3+ 引入的 Java Config 機制,配合 Servlet 3.0 WebApplicationInitializer,可實現**完全零 XML** 的純註解配置。本文從 Maven 專案建立到核心配置類編寫,完整演示如何拋棄所有 XML。
war<spring.version>4.0.1.RELEASE</spring.version>核心依賴:spring-webmvc、spring-jdbc、spring-orm、spring-tx、c3p0、mysql-connector-java、javax.servlet-api (provided)、jstl、jackson 等。
@Configuration
@ComponentScan("com.csonezp")
@EnableWebMvc
public class Config {
// 視圖解析器
@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
// 數據源
@Bean(name = "dataSource")
public ComboPooledDataSource getDataSource() {
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/mfdb");
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setUser("root");
ds.setPassword("zp1228");
ds.setMaxPoolSize(75);
return ds;
} catch (Exception e) { return null; }
}
}
註解說明:
@Configuration:聲明此類為配置類,等同於 <beans>@ComponentScan:掃描組件包,替代 <context:component-scan>@EnableWebMvc:啟用 Spring MVC 默認配置,替代 <mvc:annotation-driven>@Bean 方法:回傳對象自動註冊為 Bean,方法名即 Bean IDpublic class WebInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(Config.class); // 註冊配置類
ctx.setServletContext(servletContext);
Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.addMapping("/"); // 攔截所有請求
servlet.setLoadOnStartup(1); // 啟動時加載
}
}
實現 WebApplicationInitializer 介面,Servlet 容器啟動時自動調用 onStartup,完成 DispatcherServlet 註冊與映射,徹底取代 web.xml。
getMoviePlayInc(int movieId) {
return jdbcTemplate.query("SELECT * FROM movieplayincreament WHERE movieid=?",
new MoviePlayIncMapper(), movieId);
}
}
啟動 Tomcat,訪問 https://localhost:8080/dp/test/hello?name=sss,頁面顯示 sss, Hello!,證明純註解配置生效。
| 傳統 XML | 純註解 Java Config |
|---|---|
| 多文件分散,修改需重新部署 | 集中在 Java 類,IDE 重構、跳轉、編譯檢查全支援 |
| 無類型安全,拼寫錯誤運行時才發現 | 編譯期類型檢查,重構安全 |
| 配置與代碼割裂 | 配置即代碼,邏輯內聚 |
此模式為 Spring Boot 後續自動配置奠定基礎,掌握它能更深入理解 Spring 容器啟動本質。