1. Spring框架概述与环境准备
Spring框架作为Java企业级应用开发的事实标准,其核心特性IoC(控制反转)和AOP(面向切面编程)彻底改变了Java应用的构建方式。对于初学者而言,正确配置Spring开发环境是迈入Spring世界的第一步。本文将基于Spring 4.2.4版本(一个经过长期验证的稳定版本)详细演示从零开始的完整配置过程。
选择4.2.4版本而非最新版主要基于以下考量:首先,该版本被大量生产环境验证过稳定性;其次,许多经典教程和现有项目仍在使用该版本;最后,对于学习目的而言,核心功能在各版本间差异不大。实际项目中,建议根据具体需求评估版本选择。
2. Spring开发包获取与解压
2.1 官方资源下载
访问Spring官方资源库(https://repo.spring.io/webapp/#/artifacts/browse/simple/General/libs-release-local/org/springframework/spring)时,你会看到按版本号排序的目录结构。这里特别说明几点:
- 版本号中的"RELEASE"后缀表示正式发布版,相比SNAPSHOT版本更稳定
- 每个版本通常提供三种包:
- 带"-dist"后缀的完整分发包(包含文档和源码)
- 仅二进制包的压缩文件
- 单独的文档包
推荐下载类似"spring-framework-4.2.4.RELEASE-dist.zip"的完整分发包。下载时注意:
重要提示:浏览器直接下载大文件可能中断,建议使用下载工具或右键选择"链接另存为"
2.2 解压策略与目录结构
解压时确实应该选择根目录(如D:\),这不仅是路径长度问题,更是因为:
- Spring的完整路径可能类似:D:\spring-framework-4.2.4.RELEASE\libs\spring-beans-4.2.4.RELEASE.jar
- 开发过程中IDE会记录这些路径,过长的路径可能导致:
- 配置文件可读性下降
- 某些工具对路径长度有限制
- 团队协作时路径不一致问题
解压后的关键目录说明:
- /docs:包含API文档和参考指南(开发必备)
- /libs:核心JAR文件(开发直接依赖)
- /schema:各种XML schema文件(配置验证用)
- /projects:示例项目(学习参考)
3. 项目创建与依赖管理
3.1 基础依赖选择
在libs目录中,必须包含的四个基础JAR是:
- spring-core-{version}.jar - 核心工具类
- spring-beans-{version}.jar - Bean工厂与依赖注入
- spring-context-{version}.jar - 应用上下文
- spring-expression-{version}.jar - SpEL表达式语言
为什么是这四个?因为它们构成了Spring最核心的功能链:
- core提供基础工具
- beans实现IoC容器
- context扩展应用场景
- expression支持动态配置
经验之谈:即使暂时用不到expression,也建议一并引入,因为很多框架内部依赖它
3.2 日志依赖的必要性
Spring内部使用commons-logging作为日志门面,但需要具体的日志实现。推荐组合:
- commons-logging-1.2.jar(必须)
- log4j-1.2.17.jar + log4j.properties(经典组合)
或 - slf4j-api + logback-classic(现代方案)
配置示例(log4j.properties):
properties复制log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
3.3 IDE项目配置技巧
在Eclipse中创建Web项目时,注意:
- 选择正确的Target Runtime(如Tomcat)
- 勾选"Generate web.xml"(传统配置需要)
- 库文件应该放在WEB-INF/lib下(标准位置)
依赖导入的三种方式对比:
| 方式 | 优点 | 缺点 |
|---|---|---|
| 直接复制JAR | 简单直接 | 不易管理版本 |
| User Library | 可复用配置 | 需要额外配置 |
| Maven依赖 | 自动管理 | 需要构建工具 |
4. Spring配置实战
4.1 应用上下文配置
创建applicationContext.xml的最佳实践:
- 位置:src/main/resources(Maven标准)
- 命名:applicationContext-{module}.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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Bean definitions here -->
</beans>
4.2 XML Schema管理
在Eclipse中配置XML Catalog的详细步骤:
- Window > Preferences > XML > XML Catalog
- 添加时选择"File System",定位到spring解压目录下的/schema文件夹
- 关键是要正确关联URI与实际文件路径
例如:
- URI: http://www.springframework.org/schema/beans/spring-beans.xsd
- 文件: spring-beans-4.2.4.RELEASE.xsd
排查技巧:如果XML验证报错,检查:
- Catalog条目是否正确
- 网络连接是否正常(可能在线验证)
- 文件编码是否为UTF-8
4.3 第一个Bean定义
User类的配置示例展示了Spring的基本能力:
xml复制<bean id="user" class="cn.itcast.bean.User">
<property name="name" value="Spring Learner"/>
<property name="age" value="10"/>
</bean>
属性注入的几种方式对比:
- value:直接值(基本类型、String)
- ref:引用其他Bean
- list/map:集合类型
- 表达式:SpEL动态计算
5. 常见问题解决方案
5.1 类加载问题
典型错误:
code复制java.lang.ClassNotFoundException: org.springframework.core.io.Resource
解决方案:
- 检查所有必需JAR是否在类路径
- 确保没有版本冲突
- 清理并重建项目
5.2 XML配置问题
典型错误:
code复制org.xml.sax.SAXParseException: cvc-complex-type.2.4.c
解决方案:
- 验证XML语法是否正确
- 检查schemaLocation是否指向正确版本
- 确认命名空间声明完整
5.3 日志配置问题
典型表现:控制台无Spring启动日志
解决方案:
- 确认commons-logging存在
- 检查日志实现配置
- 尝试增加日志级别:
properties复制log4j.logger.org.springframework=DEBUG
6. 进阶配置建议
6.1 组件扫描配置
替代手动声明Bean的方式:
xml复制<context:component-scan base-package="cn.itcast"/>
需要额外引入spring-context模块
6.2 多配置文件管理
大型项目建议拆分配置:
xml复制<import resource="classpath:applicationContext-dao.xml"/>
<import resource="classpath:applicationContext-service.xml"/>
6.3 注解配置过渡
混合使用XML和注解:
xml复制<context:annotation-config/>
这样可以在保留XML的同时使用@Autowired等注解
在实际开发中,Spring配置只是起点。真正掌握Spring需要理解其背后的设计理念:依赖注入带来的松耦合、AOP实现的横切关注点分离、模板方法模式简化复杂操作等。建议从这个小例子出发,逐步探索Spring更强大的功能。