当前位置: 首页 > news >正文

配置范式演进:XML、JavaConfig 与 Spring Boot

文章目录

    • 1. XML 配置方式示例
      • 1.1 项目结构
      • 1.2 配置文件
        • `web.xml`
        • `xml-servlet.xml`
      • 1.3 控制器实现
    • 2. JavaConfig 配置方式示例
      • 2.1 项目结构
      • 2.2 配置文件
        • `JavaConfigWebInitializer.java`
        • `JavaConfigAppConfig.java`
      • 2.3 控制器实现
    • 3. Spring Boot 配置方式示例
      • 3.1 项目结构
      • 3.2 配置文件
        • `SpringBootDemoApplication.java`
      • 3.3 控制器实现
    • 4. 静态资源配置最佳实践
      • 4.1 配置静态资源映射
    • 5. 性能调优技巧
      • 5.1 启用缓存
    • 6. 测试对比
      • 6.1 访问路径对比
      • 6.2 性能对比
    • 7. 项目运行准备
      • 7.1 依赖配置(pom.xml)
      • 7.2 部署说明

1. XML 配置方式示例

1.1 项目结构

src/main/java └── crj └── example └── xml └── controller └── XmlDemoController.java src/main/webapp └── WEB-INF ├── views │ └── xmlDemo.jsp └── xml-servlet.xml

1.2 配置文件

web.xml
<web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!-- 配置 DispatcherServlet --><servlet><servlet-name>xmlDispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/xml-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>xmlDispatcher</servlet-name><url-pattern>/xml/*</url-pattern></servlet-mapping></web-app>

xml-servlet.xml
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 扫描控制器 --><context:component-scanbase-package="crj.example.xml.controller"/><!-- 启用 MVC 注解驱动 --><mvc:annotation-driven/><!-- 配置视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/WEB-INF/views/"/><propertyname="suffix"value=".jsp"/></bean></beans>

1.3 控制器实现

XmlDemoController.java

packagecrj.example.xml.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.ResponseBody;@Controller@RequestMapping("/xml")publicclassXmlDemoController{@RequestMapping("/demo")@ResponseBodypublicStringhandleRequest(){return"Response from XML configuration";}}

2. JavaConfig 配置方式示例

2.1 项目结构

src/main/java └── crj └── example └── javaconfig ├── config │ ├── JavaConfigWebInitializer.java │ └── JavaConfigAppConfig.java └── controller └── JavaConfigDemoController.java

2.2 配置文件

JavaConfigWebInitializer.java
packagecrj.example.javaconfig.config;importorg.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;publicclassJavaConfigWebInitializerextendsAbstractAnnotationConfigDispatcherServletInitializer{@OverrideprotectedClass<?>[]getRootConfigClasses(){returnnewClass[0];}@OverrideprotectedClass<?>[]getServletConfigClasses(){returnnewClass[]{JavaConfigAppConfig.class};}@OverrideprotectedString[]getServletMappings(){returnnewString[]{"/javaconfig/*"};}}

JavaConfigAppConfig.java
packagecrj.example.javaconfig.config;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.EnableWebMvc;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;importorg.springframework.web.servlet.view.InternalResourceViewResolver;@Configuration@EnableWebMvc@ComponentScan(basePackages="crj.example.javaconfig.controller")publicclassJavaConfigAppConfigimplementsWebMvcConfigurer{publicvoidconfigureViewResolvers(){InternalResourceViewResolverviewResolver=newInternalResourceViewResolver();viewResolver.setPrefix("/WEB-INF/views/");viewResolver.setSuffix(".jsp");}}

2.3 控制器实现

JavaConfigDemoController.java

packagecrj.example.javaconfig.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.ResponseBody;@Controller@RequestMapping("/javaconfig")publicclassJavaConfigDemoController{@RequestMapping("/demo")@ResponseBodypublicStringhandleRequest(){return"Response from JavaConfig configuration";}}

3. Spring Boot 配置方式示例

3.1 项目结构

src/main/java └── crj └── example └── springboot ├── SpringBootDemoApplication.java └── controller └── SpringBootDemoController.java

3.2 配置文件

SpringBootDemoApplication.java
packagecrj.example.springboot;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassSpringBootDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringBootDemoApplication.class,args);}}

3.3 控制器实现

SpringBootDemoController.java

packagecrj.example.springboot.controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.ResponseBody;importorg.springframework.stereotype.Controller;@Controller@RequestMapping("/springboot")publicclassSpringBootDemoController{@RequestMapping("/demo")@ResponseBodypublicStringhandleRequest(){return"Response from Spring Boot configuration";}}


4. 静态资源配置最佳实践

4.1 配置静态资源映射

JavaConfigAppConfig.java中添加:

@OverridepublicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");}

5. 性能调优技巧

5.1 启用缓存

JavaConfigAppConfig.java中添加:

@BeanpublicCacheManagercacheManager(){returnnewConcurrentMapCacheManager("springMvcCache");}

6. 测试对比

6.1 访问路径对比

配置方式URL响应内容
XML 配置http://localhost:8080/xml/demoResponse from XML configuration
JavaConfig 配置http://localhost:8080/javaconfig/demoResponse from JavaConfig configuration
Spring Boot 配置http://localhost:8080/springboot/demoResponse from Spring Boot configuration

6.2 性能对比

配置方式启动时间配置复杂度推荐场景
XML 配置较慢传统项目维护
JavaConfig 配置中等新项目开发
Spring Boot 配置快速开发与微服务架构

7. 项目运行准备

7.1 依赖配置(pom.xml)

<dependencies><!-- Spring MVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.20</version></dependency><!-- Servlet API --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><!-- Spring Boot 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.8</version></dependency></dependencies>

7.2 部署说明

  • 使用 Tomcat 9+ 或 Spring Boot 内置 Tomcat 部署
  • 访问路径示例:
    • XML 配置:http://localhost:8080/xml/demo
    • JavaConfig 配置:http://localhost:8080/javaconfig/demo
    • Spring Boot 配置:http://localhost:8080/springboot/demo

下一篇预告
《控制器层精进:映射、绑定与类型转换》
将涵盖:

  • @RequestMapping的高级使用场景
  • 复杂参数绑定与类型转换
  • 异步控制器与流式 API 处理
http://www.jsqmd.com/news/915082/

相关文章:

  • FreeModbus避坑指南:在STM32F429上移植TCP/RTU时,线圈和寄存器到底怎么用?
  • 农业SLAM系统挑战与优化:从特征提取到多传感器融合
  • FinalShell快捷键效率翻倍秘籍:除了Ctrl+C/V,这些隐藏组合键让你告别鼠标点点点
  • 告别邮件轰炸!手把手教你用飞书机器人聚合处理特定主题邮件(支持QQ/163邮箱)
  • 企业级Agent落地全攻略,从POC试错到规模化落地的四阶段避坑实战
  • 别再到处找源了!保姆级教程:用清华镜像在Ubuntu 22.04上一步到位安装Anaconda
  • 构建数据驱动决策闭环:从分析思维到实战落地的完整指南
  • 告别手动编译:用Makefile一键搞定VCS和Verdi的联合仿真(附完整脚本)
  • 快手图片去水印工具结合多场景使用方式适配不同设备与操作需求 - 科技热点发布
  • 2026 桥梁支座生产厂家橡胶支座生产厂家各类支座产品性能全面测评 - 栗子测评
  • 别再只会生成黑白二维码了!用Python的qrcode库玩转彩色、圆角、带Logo的个性化二维码
  • 世界模型接棒语言模型,这家公司全球首创物理AGI“双金字塔”体系,通用机器人进入“家庭时代”
  • ARM嵌入式开发中启动文件与分散加载文件的协同验证机制
  • 07-认知篇-对比-xLua深度解析
  • 11.LeetCode 1004. 最大连续1的个数 III | 滑动窗口解法详解(Java)
  • 不只是ENVI:三种免费/开源工具将GDEM高程数据转为.dem格式的横向评测
  • 2026 合肥全城黄金回收服务 到店上门均可选择 - 合扬奢侈品交易中心
  • 2026 板式橡胶支座厂家盆式高阻尼橡胶支座及球型支座加工厂家综合排行 - 栗子测评
  • 给项目配纯音乐后,我把 AI 写歌/AI 做伴奏流程拆了一遍
  • 2026 各类防护网厂商整理对比围栏钢丝网直销厂家与体育场围网选购方向 - 栗子测评
  • 量子计算在分子对接中的应用与突破
  • Amphenol ICC RJE1Y26A53D5G401线束组件深度解析
  • 告别简陋print!用PySide6的QMessageBox给你的Python桌面应用加点‘人情味’
  • 历史不会重演:AI算力霸榜,25只基金近一年回报超300%,前十最低也赚了360%
  • AI法律文档软件实战指南:从工具选型到工作流重塑
  • Seraphine:3分钟上手!英雄联盟智能BP辅助工具完全使用指南
  • VCS仿真不出波形?从fsdb文件生成到Verdi打开的完整避坑指南
  • 期刊论文摘要怎么写?Gemini 3.1 Pro让论文摘要“C位出道”的的4种万能表达
  • 手把手教你用gcc在Linux 0.11上编译自己的cat命令(EduCoder实验避坑)
  • 别再手动生成RSA密钥了!用Python cryptography库5分钟搞定密钥对生成与安全存储