ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Eclipse中Spring框架安装配置与第一个项目实战指南

2026/9/8 10:13:13 拓冰建站 浏览量
Eclipse中Spring框架安装配置与第一个项目实战指南 不少刚接触Java后端的同学都问过我一个特别实际的问题老师上课用Eclipse讲Spring我自己回去想复现结果从JDK到Eclipse再到Spring框架每一步都可能卡住要么环境起不来要么第一个HelloWorld跑不动。这篇文章我就以Eclipse为IDE完整梳理一遍Spring框架的安装、配置、第一个项目的跑通流程以及我在实际教学和项目开发中踩过的一堆坑。适合三类人看刚学Spring的学生党、从IDEA切回Eclipse维护老项目的老手、以及想搞明白Spring IoC容器到底“装”了个什么东西的入门开发者。先说清楚这里的Spring指的是Spring Framework核心也就是IoC容器和AOP那一套。它不是一个独立软件不需要像MySQL那样装一个服务端它本质上是“一堆jar包 一套使用规范”。你所谓的“安装Spring”在Eclipse里做对两件事就行把Spring相关的依赖引入到项目的构建路径里然后让Eclipse能识别你的Spring配置文件。搞清楚这个逻辑后面所有问题都好解。1. 环境准备JDK、Eclipse与Spring依赖三件套1.1 JDK安装与环境变量配置Spring框架是跑在Java虚拟机上的所以第一步永远是JDK不是JRE。很多同学图省事只装了JRE结果Eclipse能打开但一运行Spring程序就报“UnsupportedClassVersionError”或者干脆找不到主类原因就是JRE只负责运行不提供编译器而Eclipse里的Spring项目需要完整的JDK工具链。JDK版本选择上我直接给结论做Spring传统项目教学装JDK 8或者JDK 11最稳如果你准备搞Spring Boot 3.x或者Spring Framework 6.x那就必须上JDK 17及以上。为什么因为Spring 6和Spring Boot 3把底层的Java EE规范从javax迁移到了jakarta命名空间而JDK 17是支持这个迁移的最低门槛。我见过太多人拿着JDK 8硬跑Spring Boot 3结果启动即报错那不是代码问题是版本不匹配。安装完成后必须配置两个环境变量。第一个是JAVA_HOME指到JDK安装目录比如D:\Java\jdk-17。第二个是PATH在原有值后面追加%JAVA_HOME%\bin。配置完别急着打开Eclipse先打开CMD输入java -version和javac -version两个都能正常输出版本号才算通过。我记得2019年带过一个学生环境变量配错了把JAVA_HOME指到了jre目录结果java -version正常但javac永远提示找不到命令折腾了半小时其实就是JAVA_HOME没指到JDK根目录。还要说一句老教程里让你配CLASSPATH.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar这个在JDK 8以后真的没必要JDK 9开始模块化不需要手动指定lib下的jar配了反而可能干扰Spring的类加载。1.2 Eclipse版本选择与Spring Tools插件Eclipse的发行版很多千万别随便下一个。去Eclipse官网下载时认准“Eclipse IDE for Enterprise Java and Web Developers”这个版本内置了Java EE开发相关的插件和WTPWeb Tools Platform做Spring Web项目方便很多。如果你只是写Spring控制台程序练手下载“Eclipse IDE for Java Developers”也够用。Eclipse版本号方面直接选最新版问题不大但要注意它需要64位JDK支持。下载的时候看清楚Windows x86_64还是macOS的包这个下载错了一步都起不来。解压后不是双击一个setup.exe安装Eclipse是绿色软件解压到固定目录后直接运行eclipse.exe就行。不过我不建议放在C:\Program Files下Eclipse运行时会在安装目录生成.metadata和配置缓存权限不够时会读写失败我习惯放到D:\dev\eclipse这类路径。如果你打算用Spring官方推荐的集成工具可以直接下载Spring Tools 4 for Eclipse简称STS4它本质上是Eclipse发行版里预装了一整套Spring开发插件。用普通Eclipse也没问题但强烈建议装一下Spring Tools 4插件方法很简单菜单栏Help——Eclipse Marketplace搜索“Spring Tools 4”安装即可。这个插件能干什么它能在编辑Spring配置文件时给出Bean相关属性的自动补全能在applicationContext.xml上右键——Spring——Beans Graph查看Bean关系图排查依赖注入错误时特别有用。1.3 获取Spring框架依赖的两种主流方式搞清楚Spring怎么“安装”——这里就是重头戏了。有两种方式我分别说明适合什么场景。第一种是传统方式直接下载Spring框架的jar包导入Eclipse构建路径。在Spring官网或Maven中央仓库搜索spring-framework下载类似spring-framework-5.3.x-dist.zip的发行包解压后你会看到libs目录下有一堆jar。最基础的是spring-core、spring-beans、spring-context、spring-expression、spring-aop这几个如果做Web开发还要加spring-web和spring-webmvc。这种方式的好处是你能直观看到Spring到底由哪些模块组成适合教学和理解原理阶段坏处是后期依赖一多jar包手动管理就是噩梦版本冲突能让你怀疑人生。第二种也是我强烈推荐的使用Maven管理依赖。在Eclipse里创建一个Maven项目右键——New——Maven Project然后在pom.xml里直接声明Spring坐标properties spring.version5.3.31/spring.version /properties dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version${spring.version}/version /dependency /dependencies为什么一个spring-context就够了因为它会通过Maven的传递依赖机制自动把spring-core、spring-beans、spring-aop等核心jar带下来你不用一个个手动找。这种方式省心、不容易漏而且版本统一改properties里的变量就行。有同学问我能不能跳过Maven直接手动导包起步阶段可以但你只要做第二三个Spring项目我建议立刻转到Maven长痛不如短痛。2. Spring核心机制先搞懂IoC容器到底“装”了什么2.1 IoC与DIGoodbye手动newSpring最核心的思想就四个字母IoC全称Inversion of Control控制反转。翻译成人话在传统开发里Service要用Dao自己new一个就行。但这样Service和Dao就死死耦合了将来想换Dao实现必须改Service源码。Spring的做法是让Service告诉容器“我需要一个Dao”容器在启动时把合适的Dao实现“注入”给Service。谁控制谁反转了呢对象的创建控制权从程序员手里转移到了容器手里所以叫控制反转。依赖注入DI则是IoC的实现方式。用一个生活化类比你吃饭不想自己做于是告诉餐厅服务员“来一份宫保鸡丁”餐厅后厨做好后端上来给你。这个“你”就是Service后厨就是Spring容器宫保鸡丁就是Dao对象。你没自己开火但你要的菜被厨房主动送过来了。这也就是Spring中“三级缓存”等原理之所以被热议的原因——容器内部怎么管理这些Bean的创建、循环依赖的解决都是围绕IoC展开的。但作为一个入门者第一步不是啃三级缓存源码而是先踏实把一个Bean注入另一个Bean的流程跑通。2.2 Bean生命周期与作用域别踩单例的坑Spring容器创建的对象统称Bean。默认情况下每个Bean是单例的singleton意味着从容器拿两次同一个Bean得到的是同一个对象。对应到我们的餐厅类比就是后厨只炒一盆宫保鸡丁所有桌的顾客吃的都是同一份。这对无状态Service类没问题但如果你在Bean里放了成员变量来存用户数据就会出现数据互相串的诡异Bug。除了单例还有prototype作用域每次获取都新建一个对象适合有状态组件。设置方式bean iduserDao classcom.example.dao.impl.UserDaoImpl scopeprototype/Bean的生命周期也值得有个概念实例化——属性填充——初始化通过init-method指定——使用——销毁destroy-method指定。在Eclipse里调试Spring时你可以在初始化方法里打断点观察Bean是怎么一步一步被容器料理出来的这个过程理解透彻了后面对AOP、事务管理的认知会顺畅很多。2.3 XML配置与注解配置从入门到主流Spring支持两种主流配置方式入门阶段我极其推荐先用XML。为什么因为XML配置把所有Bean的关系和数据看得一清二楚是理解容器原理的最佳教材。比如这样bean iduserDao classcom.example.dao.impl.UserDaoImpl/ bean iduserService classcom.example.service.impl.UserServiceImpl property nameuserDao refuserDao/ /bean这段配置表达得非常直接创建一个UserService Bean并把id为userDao的Bean通过setter方法注入进去。这种方式像“图纸”把对象关系画得明明白白。但随着项目变大XML会变得又臭又长。于是Spring推出了注解配置。你只需要在类上加Component或Service注解声明“我是容器要管理的一个Bean”再用Autowired标注“我需要自动注入一个依赖”容器启动时自动扫描处理Service public class UserServiceImpl implements UserService { Autowired private UserDao userDao; }然后配置一行扫描路径即可context:component-scan base-packagecom.example/XML靠ref显式指定依赖注解靠类型自动匹配。两者各有利弊但学习顺序一定是先XML后注解否则你根本理解不了Autowired背后做了什么。2.4 三种依赖注入方式对比与选择依赖注入有三种常见姿势在Eclipse里写代码时经常被问到区别我直接给结论Setter注入XML配置里用property或者注解直接写在setter方法上。优点是灵活性好之后可以重新注入缺点是依赖关系不够强制对象可能处于未完全初始化状态。构造器注入在XML里用constructor-arg或者注解写在构造器上。优点是一创建就完整初始化线程安全Spring官方推荐这种方式缺点是参数多时代码显得啰嗦。字段注入用Autowired直接标在成员变量上写起来最清爽。缺点是不易测试且与Spring强绑定。我自己的经验是自己写着玩怎么方便怎么来但团队项目和正式框架里尽量选构造器注入。3. Eclipse中从零跑通第一个Spring项目3.1 创建Java项目并引入Spring依赖打开Eclipse菜单File——New——Java Project如果你已经装了Spring Tools插件也可以选Spring Starter Project但那是Boot项目后面再说项目名比如叫spring-demoJRE选你安装的JDK版本。创建完成后项目结构就是一个空的src目录。假设你是手动导jar的方式接下来右键项目——Build Path——Configure Build Path——Libraries——Add External JARs把你下载的Spring相关jar全部选进去。注意spring-core、spring-beans、spring-context、spring-expression、spring-aop这五个必须一起引入缺一个启动时就可能报NoClassDefFoundError。如果是Maven方式右键——New——Other——Maven Project创建后在pom.xml里粘贴上面写过的依赖。添加完依赖后Eclipse会自动下载jar首次可能较慢右下角能看到进度条。3.2 编写Dao、Service与Spring配置文件我习惯用一个简单的用户查询案例作为第一个Spring练习。先定义接口和实现类package com.example.dao; public interface UserDao { void findUserByName(String name); }package com.example.dao.impl; import com.example.dao.UserDao; public class UserDaoImpl implements UserDao { Override public void findUserByName(String name) { System.out.println(查询用户 name); } }再写Service层package com.example.service.impl; import com.example.dao.UserDao; public class UserServiceImpl { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao userDao; } public void run() { userDao.findUserByName(张三); } }然后在src目录下新建一个applicationContext.xml配置文件。如果你安装了Spring Tools插件右键——New——Spring Bean Configuration File没有插件就手动建一个XML文件。内容?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd bean iduserDao classcom.example.dao.impl.UserDaoImpl/ bean iduserService classcom.example.service.impl.UserServiceImpl property nameuserDao refuserDao/ /bean /beans这里每个bean标签里的class都是全限定类名Eclipse里如果类名写错保存文件时不会立刻报错但一运行就会告诉你BeanCreationException找半天才发现在某个类名的字母拼写问题上。3.3 编写启动类用ClassPathXmlApplicationContext加载容器在src下写一个带main方法的启动类package com.example; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.example.service.impl.UserServiceImpl; public class MainApp { public static void main(String[] args) { ApplicationContext context new ClassPathXmlApplicationContext(applicationContext.xml); UserServiceImpl userService (UserServiceImpl) context.getBean(userService); userService.run(); } }右键——Run As——Java Application如果一切正常控制台会输出“查询用户张三”。这意味着什么意味着你在程序里从头到尾没有写过一个new UserServiceImpl()没有new UserDaoImpl()两个对象全部由Spring容器创建并且完成了依赖组装。这就是IoC的直观体验。3.4 在Eclipse里调试Spring Bean的创建过程第一次跑通后不要急着高兴好好利用Eclipse的调试功能去观察Spring容器干了什么。在MainApp.java的context.getBean(userService)这一行左侧双击打上断点以Debug As——Java Application运行。程序停在断点处时按F5一步步进入方法你会发现容器先解析配置文件然后创建userDao再创建userService并调用setter注入。我在带学生时经常说一句话调试一次Spring容器启动比看十篇原理文章有用。你能真实看到AbstractApplicationContext里refresh()方法的一系列流程——BeanFactory的创建、Bean定义的加载、单例Bean的预实例化等。以后面试被问Spring启动过程如果你能结合自己Debug时看到的类名和顺序来回答已经超过大多数人。4. 进阶玩法AOP、注解驱动以及怎么向Spring Boot过渡4.1 AOP的基本玩法切面、通知与常见坑搞定了IoCSpring框架的另一半就是AOP面向切面编程。它的作用是把日志、权限校验、事务这类横切逻辑从业务代码里抽出来做成独立的“切面”在不修改原有代码的情况下给方法增加功能。对于Eclipse入门项目我建议先用最简单的AspectJ注解方式理解概念。首先在pom.xml里补上AOP依赖dependency groupIdorg.springframework/groupId artifactIdspring-aspects/artifactId version${spring.version}/version /dependency配置文件中开启AOP自动代理aop:aspectj-autoproxy/然后写一个切面类package com.example.aspect; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; Aspect public class LogAspect { Before(execution(* com.example.service.impl.*.*(..))) public void logBefore() { System.out.println(方法执行前记录日志); } }跑一下之前的例子会发现每次调用UserServiceImpl的方法前都多了一条日志。这就是AOP最直观的“拦截”效果。要注意的坑是自调用问题。也就是同一个类里一个方法调用另一个被切面的方法切面是不生效的因为代理只包裹了外层调用。入门阶段只需知道这个现象后面用到事务管理时会有更深的体会。4.2 全注解配置把Eclipse项目里的XML减到最少当你对XML配置熟悉了就可以尝试配置类方式。新建一个配置类package com.example.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; Configuration ComponentScan(basePackages com.example) public class AppConfig { }再次修改启动类不再加载XML而是加载配置类ApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);同时给UserServiceImpl加上Service注解给setUserDao方法或字段加上Autowired。你会发现项目里连applicationContext.xml都可以删掉了。这就是Spring积极拥抱Java配置的体现。在Eclipse里即使全注解Spring Tools插件同样能帮你识别Bean因为配置类本质也是Java代码代码提示和跳转体验反而比字符串写的XML好得多。4.3 从Spring框架过渡到Spring BootEclipse照样能打很多人以为Spring Boot必须在IDEA里玩其实Eclipse配合Spring Tools插件一点不差。在Eclipse中右键——New——Spring Starter Project在弹窗里选择Spring Boot版本和需要的依赖比如Web、DevToolsEclipse就会自动生成一个Maven项目主类长这样SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }运行方式和普通Java类一样右键Run As——Java Application。Spring Boot的嵌入Tomcat会自动启动你直接在浏览器访问localhost:8080即可。对比传统的Spring FrameworkBoot最大的价值是“约定大于配置”——不需要手动创建XML不需要部署WAR包一个main方法就能起来一个Web应用。以后看Spring AI、Spring Cloud、Spring Security这些热门生态基本都是在这个基础上扩展的基础Spring框架没打牢后面上手这些会很吃力。5. 常见问题排查与避坑速查5.1 经典报错找不到或无法加载主类 org.apache.catalina.startup.Bootstrap这个报错我在很多论坛的热搜词里看到了它跟Spring本身关系不大而是你在Eclipse里运行Tomcat时Tomcat没有正确关联到项目的运行时环境。点击Window——Preferences——Server——Runtime Environments确认Tomcat安装目录已添加然后在项目右键——Properties——Targeted Runtimes里勾选你配置的Tomcat。出现这个报错九成是Tomcat运行时没选对上或者Tomcat目录下的lib缺失。5.2 明明导入了spring-context运行还是NoClassDefFoundError这个情况有三种常见原因第一构建路径缺了其他配合jar比如缺少spring-beans时容器启动时加载某些类就失败第二多个版本的jar同时存在比如你既手动导入了spring-core 4.x又通过Maven拉取了5.x类被重复加载导致诡异错误第三Eclipse没有把jar真正发布到运行环境这种情况在Web项目里很常见需要右键项目——Properties——Deployment Assembly确认依赖已加入。排查顺序就是先看构建路径再看Deployment Assembly最后用ctrlshiftt搜索具体缺失的那个类定位是哪个jar包的问题。5.3 Eclipse打不开或者启动后卡死如果你遇到过Eclipse双击图标无反应的状况多数是两个原因。一是工作空间损坏解决方法是启动时加参数eclipse.exe -clean -data 新工作空间路径二是内存不足打开eclipse.ini把-Xms和-Xmx调大我一般会设成-Xms512m和-Xmx2048m注意这两行必须写在-vmargs后面才生效。还有一个非常冷门但实际遇过的问题是JDK版本过高但与Eclipse版本不兼容老Eclipse2020年以前版本配JDK 17大概率起不来要么升Eclipse要么降JDK二选一。5.4 Maven依赖下载慢或者pom.xml第一行就报错Maven中央仓库在国外国内网络环境下初次拉Spring依赖确实可能让人抓狂。解决办法是配置阿里云镜像。在maven安装目录/conf/settings.xml的mirrors里加上mirror idaliyun/id namealiyun maven mirror/name urlhttps://maven.aliyun.com/repository/public/url mirrorOfcentral/mirrorOf /mirror配置完后在Eclipse里右键项目——Maven——Update Project勾选Force Update。如果之前依赖已经下载了一半导致本地仓库缓存损坏可以把本地仓库默认是C:\Users\你的用户名\.m2\repository里对应目录删掉再更新不要怕重新下载就行。5.5 Eclipse里按Ctrl无法跳转到Spring的类或方法热词里有人专门搜“eclipse按ctrl不跳转”这个本质是Eclipse没有关联源码包。如果你的Spring依赖是通过Maven管理的在pom.xml里依赖默认会下载源码正常按住Ctrl点击方法就能跳转。不跳转时先确认该项目是否被正确识别为Maven项目项目图标上有没有“M”标志如果手动导的jar包你需要右键jar——Properties——Java Source Attachment——关联Spring源码压缩包跳转就正常了。还有一个冷知识Eclipse的自动构建被关了也会导致索引不更新Project——Build Automatically必须保持勾选。5.6 Spring 6 / Spring Boot 3的javax与jakarta命名空间问题这算是近几年最容易踩的坑也值得单拿出来说。Spring Framework 6把javax.servlet等规范迁移到了jakarta.servlet以前在老项目里常见的import javax.annotation.PostConstruct在Spring 6里必须改成jakarta.annotation.PostConstruct。如果你在Eclipse里把一个Spring 5项目升到Spring 6编译时爆出一堆红叉不用慌基本都是import的问题。反过来拿Spring Boot 3的教程代码往Spring Boot 2项目里粘同样会报找不到类。解决思路就一条先确定项目用的Spring大版本再确定对应的包名规范。JDK 17、Spring Boot 3、jakarta是一套JDK 8或11、Spring Boot 2、javax是一套混搭必踩雷。5.7 关于WEB-INF/lib、Build Path和classpath的区别最后一个我在教程里很少见到有人讲清楚的问题Web项目里把jar丢进WEB-INF/lib和通过Build Path引入有什么区别简单说Build Path是编译期Eclipse编译代码时需要用这些jar找类WEB-INF/lib是运行期Tomcat启动Web应用时需要从这个目录加载类。如果你只在Build Path里加了jarEclipse没有自动同步到WEB-INF/lib运行时就会报ClassNotFoundException但编译不报错。解决方法是右键项目——Properties——Deployment Assembly——Add——Java Build Path Entries把Build Path里的依赖发布到WEB-INF/lib。这个问题在传统SSH项目里频繁出现理解一次能省你未来无数个加班的夜晚。写在最后的体会我不是那种“必须用IDEA否则不配写Java”的拥趸Eclipse在传统项目维护、学生机房、老机器上依然有它的价值。在Eclipse里学Spring我的建议特别朴素先把第一个Bean跑通再用调试器完整走一遍容器启动流程最后再谈原理和源码。Spring框架说到底就是一组jar包加一套使用范式当你能在Eclipse里轻松创建、配置、运行一个Spring项目那些讨论度很高的源码原理、扩展机制才真正有了落地的锚点。至于更多进阶方向Spring Boot、Spring Security、Spring Cloud这些生态都是在Spring核心这根树干上长出来的分支根扎稳了后面怎么长都不会跑偏。