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

文章目录

    • [1. XML 配置方式示例](#1. XML 配置方式示例)
      • [1.1 项目结构](#1.1 项目结构)
      • [1.2 配置文件](#1.2 配置文件)
      • [1.3 控制器实现](#1.3 控制器实现)
    • [2. JavaConfig 配置方式示例](#2. JavaConfig 配置方式示例)
    • [3. Spring Boot 配置方式示例](#3. Spring Boot 配置方式示例)
    • [4. 静态资源配置最佳实践](#4. 静态资源配置最佳实践)
      • [4.1 配置静态资源映射](#4.1 配置静态资源映射)
    • [5. 性能调优技巧](#5. 性能调优技巧)
      • [5.1 启用缓存](#5.1 启用缓存)
    • [6. 测试对比](#6. 测试对比)
      • [6.1 访问路径对比](#6.1 访问路径对比)
      • [6.2 性能对比](#6.2 性能对比)
    • [7. 项目运行准备](#7. 项目运行准备)
      • [7.1 依赖配置(pom.xml)](#7.1 依赖配置(pom.xml))
      • [7.2 部署说明](#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
xml 复制代码
<web-app xmlns="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
xml 复制代码
<beans xmlns="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-scan base-package="crj.example.xml.controller"/>

    <!-- 启用 MVC 注解驱动 -->
    <mvc:annotation-driven/>

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

1.3 控制器实现

XmlDemoController.java

java 复制代码
package crj.example.xml.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/xml")
public class XmlDemoController {

    @RequestMapping("/demo")
    @ResponseBody
    public String handleRequest() {
        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
java 复制代码
package crj.example.javaconfig.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class JavaConfigWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{JavaConfigAppConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/javaconfig/*"};
    }
}
JavaConfigAppConfig.java
java 复制代码
package crj.example.javaconfig.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "crj.example.javaconfig.controller")
public class JavaConfigAppConfig implements WebMvcConfigurer {

    public void configureViewResolvers() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
    }
}

2.3 控制器实现

JavaConfigDemoController.java

java 复制代码
package crj.example.javaconfig.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/javaconfig")
public class JavaConfigDemoController {

    @RequestMapping("/demo")
    @ResponseBody
    public String handleRequest() {
        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
java 复制代码
package crj.example.springboot;

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

@SpringBootApplication
public class SpringBootDemoApplication {

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

3.3 控制器实现

SpringBootDemoController.java

java 复制代码
package crj.example.springboot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.stereotype.Controller;

@Controller
@RequestMapping("/springboot")
public class SpringBootDemoController {

    @RequestMapping("/demo")
    @ResponseBody
    public String handleRequest() {
        return "Response from Spring Boot configuration";
    }
}

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

4.1 配置静态资源映射

JavaConfigAppConfig.java 中添加:

java 复制代码
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**")
            .addResourceLocations("classpath:/static/");
}

5. 性能调优技巧

5.1 启用缓存

JavaConfigAppConfig.java 中添加:

java 复制代码
@Bean
public CacheManager cacheManager() {
    return new ConcurrentMapCacheManager("springMvcCache");
}

6. 测试对比

6.1 访问路径对比

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

6.2 性能对比

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

7. 项目运行准备

7.1 依赖配置(pom.xml)

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 部署说明


下一篇预告

《控制器层精进:映射、绑定与类型转换》

将涵盖:

  • @RequestMapping 的高级使用场景
  • 复杂参数绑定与类型转换
  • 异步控制器与流式 API 处理
相关推荐
软萌萌的11 天前
Java Spring Boot 修改yml配置&加载顺序规则
java·spring boot·python
陈随易1 天前
moon,apt和yum之外linux系统命令安装新选择
前端·后端·程序员
x17388062731 天前
XXE外部实体注入
xml·笔记
码事漫谈1 天前
当单库日增 4.5TB,异构实时同步还能稳得住吗?
后端
IT_陈寒1 天前
SpringBoot自动配置的坑,这次真踩疼我了
前端·人工智能·后端
shengjk11 天前
AI Engineering 五代演进史:Prompt、RAG、Agent 到 Graph 的架构革命
后端
子兮曰1 天前
AI 浏览器 Agent 的安全困局:当自动化工具可以偷走你的登录态
前端·人工智能·后端
妙码生花1 天前
从 PHP 到 AI + Golang,程序员自救转型手记(四十八):菜单规则管理实现
前端·后端·ai编程
XuCoder1 天前
Redis 持久化:RDB 与 AOF
后端
Conan在掘金1 天前
鸿蒙 7.0 智能体框架 2.0:意图即服务根因——从 InsightIntentExecutor 到 HMAF 2.0 Skill 演进
后端