一、为什么需要学习Spring框架?
1.企业级开发标配
超过60%的Java项目都使用Spring生态(数据来源:JetBrains开发者报告)。
2.简化复杂问题
通过IoC和DI,告别new关键字满天飞的代码。
3.职业竞争力
几乎所有Java岗位都要求掌握Spring框架。
Spring的江湖地位
Spring框架就像Java世界的”瑞士军刀” - 从单体应用到微服务,从数据库操作到安全认证,它几乎无所不能。
二、Spring的技术特色与优势
Spring是一个轻量级的开源Java框架,它通过提供基础的依赖注入(DI)、控制反转(IoC)以及面向切面编程(AOP)等功能,帮助开发者简化Java应用的开发。Spring不仅支持开发企业级的Web应用,还能与各种中间件和技术栈无缝集成。
Spring的四大杀手锏
1.IoC与DI:颠覆传统编程思维
• IoC(控制反转)
将对象的创建和生命周期管理交给Spring容器,而不是手动管理。
• DI(依赖注入)
IoC的一种实现方式,自动将依赖关系注入类中,解耦类之间的关系。
传统方式:程序员手动new
对象 → 紧耦合
Spring方式:容器自动管理对象 → 松耦合
对比案例:
// 传统方式:手动创建对象
UserService userService = new UserServiceImpl();
// Spring方式:自动注入依赖
@Autowired
private UserService userService;
2.AOP:像手术刀一样精准增强功能
AOP(面向切面编程)可以在不修改原始代码的情况下,增加额外功能。
应用场景
日志记录、事务管理、权限校验等。
原理
通过动态代理实现功能注入。
3.模块化设计:按需取用的乐高积木
Spring框架提供了多种子模块,开发者可以根据项目需求灵活选择使用:
4.开发效率:告别XML地狱
通过自动化配置和约定大于配置的原则,Spring大大减少了开发过程中的配置工作。
效率对比:
• 传统SSH项目:500+行XML配置
• Spring Boot项目:0行XML配置
Spring的核心思想
是通过控制反转(IoC)和依赖注入(DI),帮助开发者解耦应用组件,实现更加灵活、可测试的代码。
三、手把手实战:第一个Spring程序
创建一个最简单的Spring Boot应用程序,从而帮助你快速上手。
步骤1:项目初始化(关键配置图解)
1.访问start.spring.io。
如下是https://start.spring.io 页面:
2.配置项如下:
• Project:选择Maven Project
• Language:选择Java
• Spring Boot:
推荐使用Spring Boot 3.x(最新稳定版)
• Group:com.example
• Artifact:spring-demo
• Name:spring-demo
• Description:Spring Boot入门示例
• Packaging:选择Jar
• Java Version:
建议选择17(LTS长期支持版本)。
3.在“Dependencies”部分选择:
• Spring Web
• Spring Boot DevTools(支持热部署)
4.点击Generate按钮,下载生成的项目压缩包。
步骤2:解压并导入到IDE
1.下载后,将项目解压并导入IDE(如IntelliJ IDEA或Eclipse)。
2.IDE会自动加载Maven依赖,确保项目正常工作。
导入到IDE后,项目的目录结构通常如下:
spring-demo
├── pom.xml // 项目的Maven配置文件
└── src
└── main
└── java
└── com
└── example
└── springdemo
├── SpringDemoApplication.java // Spring Boot 启动类
├── GreetingService.java // 服务接口
└── GreetingServiceImpl.java // 服务实现类
└── resources
├── application.properties // 默认配置文件
└── static // 静态资源(如HTML、JS、CSS等)
└── ...
└── templates // 模板文件(如Thymeleaf模板等)
└── ...
目录结构解析
• pom.xml
Maven 配置文件,包含项目依赖、插件、构建配置等信息。
在Spring Initializr生成的项目中,会自动为你生成此文件。
• SpringDemoApplication.java - Spring Boot 启动类。
• GreetingService.java - 服务接口。
• GreetingServiceImpl.java - 服务实现类。
• src/main/resources/
• application.properties - Spring Boot 配置文件。
• static/ - 存放静态资源的目录。
• templates/ - 存放模板文件的目录。
pom.xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 项目的唯一标识,包含groupId、artifactId和version -->
<groupId>com.example</groupId> <!-- 设置GroupID,代表组织或公司 -->
<artifactId>spring-demo</artifactId> <!-- 设置ArtifactID,代表项目名称 -->
<version>0.0.1-SNAPSHOT</version> <!-- 设置版本号 -->
<name>spring-demo</name> <!-- 项目名称 -->
<description>Spring Boot入门示例</description> <!-- 项目描述 -->
<!-- 设置父级Spring Boot的pom文件 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <!-- Spring Boot的父级pom -->
<version>2.7.8</version> <!-- 设置Spring Boot版本号 -->
<relativePath/> <!-- 依赖父级Spring Boot的pom -->
</parent>
<!-- 项目依赖部分 -->
<dependencies>
<!-- Web开发支持,包含了Spring MVC、Tomcat等 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 开发工具支持,支持热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 测试支持工具,包含JUnit、Mockito等 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 配置项目构建 -->
<build>
<plugins>
<!-- 使用Spring Boot插件构建应用 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
解析:
• spring-boot-starter-web:提供Web开发相关的依赖,包含Spring MVC和内嵌的Tomcat容器。
• spring-boot-devtools:用于开发时支持热部署,改动代码后无需重新启动应用即可看到效果。
• spring-boot-starter-test:包含JUnit、Mockito等常用的测试工具包,便于单元测试。
• spring-boot-maven-plugin:用于打包Spring Boot应用并生成可执行JAR文件,支持通过mvn spring-boot:run启动应用。
步骤 3:创建主程序文件
创建SpringDemoApplication.java,代码如下:
package com.example.springdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication // 标识这是Spring Boot的入口类
public class SpringDemoApplication {
public static void main(String[] args) {
// 启动Spring Boot应用
SpringApplication.run(SpringDemoApplication.class, args);
}
}
• @SpringBootApplication注解标记了这个类是Spring Boot的启动类。
• SpringApplication.run()方法启动了Spring Boot应用并自动配置。
步骤 4:创建一个简单的Bean
创建一个接口GreetingService.java和它的实现类GreetingServiceImpl.java,用来展示Spring的依赖注入(DI)功能。代码如下:
package com.example.springdemo;
public interface GreetingService {
void greet();
}
package com.example.springdemo;
import org.springframework.stereotype.Component;
@Component // 让Spring管理这个类为一个Bean
public class GreetingServiceImpl implements GreetingService {
@Override
public void greet() {
System.out.println("Hello, Spring Boot!");
}
}
• @Component注解让Spring容器管理这个类,并将它注册为一个Bean。
步骤 5:使用Spring容器
修改主程序SpringDemoApplication.java,让Spring容器自动注入GreetingService。
package com.example.springdemo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringDemoApplication implements CommandLineRunner {
@Autowired // 自动注入的魔法就在这里!
private GreetingService greetingService; // 自动注入GreetingService
public static void main(String[] args) {
SpringApplication.run(SpringDemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
greetingService.greet(); // 调用GreetingService的greet方法
}
}
• @Autowired注解使Spring自动注入GreetingService。
• CommandLineRunner接口的run方法会在应用启动后执行,打印Hello, Spring Boot!。
步骤 6:运行程序
1.在IDE中运行SpringDemoApplication类。
2.控制台输出:
Hello, Spring Boot!
总结:
DI的体现
1.依赖注入(DI)是指Spring容器负责将依赖的对象自动注入到需要使用这些对象的类中。
2.本例通过@Autowired注解,Spring容器自动将GreetingServiceImpl注入到GreetingService接口中,解耦了类之间的依赖关系。
四、总结
1.关键收获
• 掌握Spring两大核心:IoC(控制反转)与DI(依赖注入)。
• 完成首个Spring Boot应用的创建与运行。
• 理解注解驱动开发的优势。