配置范式演进: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 处理
相关推荐
宫水三叶的刷题日记20 小时前
馋猫外卖:AI 让字节式试错没有天花板
后端
SomeB1oody21 小时前
【RustyML入门】7.4. 按需裁剪与模块化集成
开发语言·后端·机器学习·rust·教程
罗超驿21 小时前
SpringBoot 快速入门
java·spring boot·后端
卷无止境21 小时前
除了开发api,FastAPI其实也可以配合jinja2模板写页面
后端·python·fastapi
newerp21 小时前
Redis 操作与缓存策略
后端·程序员·go
newerp1 天前
GORM ORM 基础
后端·程序员·go
小岛前端1 天前
AI Skills 已经封神,但新的问题却越来越严重!
前端·后端·github
拖孩1 天前
一个人 + AI 做的小程序,上线 15 天赚了 10 块 5
前端·后端·微信小程序
newerp1 天前
CRUD 操作与预处理语句
后端·程序员·go
wei_shuo1 天前
KES 数据同步与ETL实战:数据集成、转换与实时同步方案
后端