Spring 核心配置文件(spring.xml)构建指南


一、配置文件基础结构

每个 Spring 项目的核心配置文件 spring.xml 需包含以下基础声明:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<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"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context 
           https://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 配置内容 -->
</beans>

关键点:

  • 声明 XML 版本和编码。
  • 引入 beans 和 context 命名空间,用于定义 Bean 和注解驱动配置。

二、组件扫描与过滤

作用 :自动扫描并注册带有 @Component、@Service 等注解的类为 Spring Bean。

你的配置:

xml 复制代码
<context:component-scan base-package="cn.cjxy">
    <context:exclude-filter type="annotation" 
        expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

解释:

  • base-package="cn.cjxy":扫描该包及其子包下的所有组件。
  • <exclude-filter>:排除 @Controller 注解的类(由 Spring MVC 管理)。

最佳实践:

  • 分层扫描 :若项目分层明确(如 cn.cjxy.service、cn.cjxy.dao),可细化扫描路径。
  • 过滤策略 :通过 include-filter 或 exclude-filter 精准控制扫描范围。

三、加载外部属性文件

作用 :从 jdbc.properties 加载数据库连接信息,避免硬编码。

你的配置:

xml 复制代码
<context:property-placeholder location="classpath:jdbc.properties"/>

关键点:

  • location="classpath:jdbc.properties":从类路径(如 src/main/resources)加载文件。
  • 属性文件示例 jdbc.properties:
properties 复制代码
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
username=root
password=your_password

注意事项:

  • 确保属性键名与 XML 中 ${key} 完全匹配(如 username 而非 name)。

四、配置数据源(Druid)

作用:定义数据库连接池,管理连接资源。

你的配置:

xml 复制代码
<bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
    <property name="url" value="${url}"/>
    <property name="driverClassName" value="${driver}"/>
</bean>

优化建议:

  • 连接池参数:添加初始连接数、最大活跃数等配置。
xml 复制代码
<property name="initialSize" value="5"/>
<property name="maxActive" value="20"/>
<property name="minIdle" value="5"/>

五、整合 MyBatis

作用 :配置 MyBatis 的 SqlSessionFactory 和 Mapper 接口扫描。

1. 配置 SqlSessionFactory

你的配置:

xml 复制代码
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="datasource"/>
    <property name="typeAliasesPackage" value="cn.cjxy.domain"/>
</bean>

解释:

  • dataSource:引用上一步定义的 Druid 数据源。
  • typeAliasesPackage:自动为 cn.cjxy.domain 包下的类注册别名(如 User 对应 User)。

扩展配置:

  • 指定 MyBatis 配置文件:
xml 复制代码
<property name="configLocation" value="classpath:mybatis-config.xml"/>
  • 加载 XML 映射文件:
xml 复制代码
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
2. 扫描 Mapper 接口

你的配置:

xml 复制代码
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="cn.cjxy.mapper"/>
</bean>

作用 :自动为 cn.cjxy.mapper 包下的接口生成代理实现类,无需手动编写实现。

注意事项:

  • 确保 Mapper 接口与 XML 映射文件的路径一致(如 UserMapper.java 对应 UserMapper.xml)。

六、事务管理(补充)

作用:添加声明式事务支持(你的配置中未包含,建议补充)。

xml 复制代码
<!-- 1. 配置事务管理器 -->
<bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="datasource"/>
</bean>
<!-- 2. 启用注解驱动事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

使用示例 :在 Service 层添加 @Transactional 注解:

java 复制代码
@Service
public class UserService {
    @Transactional
    public void updateUser(User user) {
        userMapper.update(user);
    }
}

七、完整配置参考

整合后的 spring.xml:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<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:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context 
           https://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- 1. 组件扫描 -->
    <context:component-scan base-package="cn.cjxy">
        <context:exclude-filter type="annotation" 
            expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!-- 2. 加载属性文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- 3. 数据源配置 -->
    <bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
        <property name="initialSize" value="5"/>
        <property name="maxActive" value="20"/>
    </bean>
    <!-- 4. MyBatis 整合 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource"/>
        <property name="typeAliasesPackage" value="cn.cjxy.domain"/>
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.cjxy.mapper"/>
    </bean>
    <!-- 5. 事务管理 -->
    <bean id="transactionManager" 
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="datasource"/>
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

八、常见问题与调试技巧
  1. 数据源连接失败
    • 检查 jdbc.properties 中的键名与 XML 中的 ${key} 是否一致。
    • 查看 Druid 日志:在 log4j.xml 中配置 com.alibaba.druid.pool 日志级别为 DEBUG。
  2. Mapper 接口未注入
    • 确保 MapperScannerConfigurer 的 basePackage 路径正确。
    • 检查 Mapper 接口是否在指定包下,且未被其他扫描策略排除。
  3. 事务不生效
    • 确认 Service 类和方法上添加了 @Transactional。
    • 确保事务管理器 Bean 的 dataSource 与数据源 Bean 的 id 一致。

通过本教程,你已掌握如何从零构建 spring.xml 并整合 MyBatis 与事务管理。配置文件的核心在于 分层清晰、职责明确,通过注解驱动和外部化配置,显著提升代码可维护性。

相关推荐
captain376几秒前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你021422 分钟前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
步行cgn1 小时前
Spring MVC + Thymeleaf 模板解析失败:从 500 错误到页面正常显示
java·spring·mvc
lgcgkCQ2 小时前
【AI 转型实战 1】SpringAI 入门:搭建基础大模型对话能力
java·ai·agent·rag·spring ai·mcp·langchain4j
Wang's Blog2 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
学到老活到老2 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
Flynn Liang2 小时前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai
tongyiixiaohuang2 小时前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库
鱼宵3 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
学长毕设3 小时前
基于SpringBoot的餐厅管理系统-附源码
java·spring boot·后端