第一章:Spring 基础入门
1.1 Spring 框架概述
1.1.1 什么是 Spring
Spring 是一个轻量级的 Java 开发框架,由 Rod Johnson 在 2004 年创立。它的主要目标是简化 Java 企业级开发,提供一套全面的解决方案,帮助开发者更高效地构建复杂的应用程序。
Spring 的核心特性包括:
-
控制反转(IoC):将对象的创建和依赖管理交给框架。
-
面向切面编程(AOP):在不修改代码的情况下,动态添加额外的功能。
-
声明式事务管理:简化事务处理,减少模板代码。
1.1.2 Spring 的发展历程和优势
发展过程:
-
2002-2004:Spring 初创,旨在解决早期 Java EE 的复杂性。
-
2004-2010:Spring 逐渐成熟,成为主流的 Java 企业级框架。
-
2010-至今:引入 Spring Boot 和 Spring Cloud,进一步简化开发和微服务架构。
优势:
-
轻量级:Spring 是非侵入式的框架,可以通过注解或 XML 配置轻松集成到现有的项目中。
-
模块化:Spring 提供了丰富的模块,如 Spring Core、Spring MVC、Spring Boot 等,可以根据需求选择使用。
-
社区支持:Spring 拥有庞大的开发者社区和丰富的资源,解决问题更容易。
1.1.3 Spring 的应用场景
Spring 适用于各种规模的 Java 企业级开发,常见的应用场景包括:
-
Web 开发:使用 Spring MVC 或 Spring Boot 构建高可扩展性的 Web 应用。
-
微服务架构:Spring Cloud 提供了一系列工具,用于构建和管理微服务。
-
数据访问:Spring 提供了 JdbcTemplate 和 Spring Data JPA 等工具,简化数据库操作。
1.2 环境搭建与第一个 Spring 应用
1.2.1 开发环境准备
确保以下工具已经安装并配置好:
-
Java JDK:安装 JDK 8 或更高版本。
-
IDE:推荐使用 IntelliJ IDEA 或 Eclipse。
-
Maven:用于项目管理和依赖管理。
1.2.2 Spring 项目的创建
1.2.2.1 创建 Maven 项目
-
打开 IntelliJ IDEA 或 Eclipse,创建一个新的 Maven 项目。
-
在
pom.xml
文件中添加 Spring 的核心依赖:
<dependencies><!-- Spring 核心依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.30</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.30</version></dependency>
</dependencies>
1.2.2.2 创建一个简单的类
创建一个名为 HelloSpring
的类:
package com.example;public class HelloSpring {private String message;public HelloSpring(String message) {this.message = message;}public void sayHello() {System.out.println("Hello, " + message);}
}
1.2.2.3 创建 Spring 配置文件
创建一个名为 applicationContext.xml
的文件,定义 HelloSpring
对象的配置:
<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定义一个 HelloSpring 对象 --><bean id="helloSpring" class="com.example.HelloSpring"><constructor-arg value="Spring Framework"/></bean>
</beans>
1.2.2.4 使用 Spring 容器
创建一个 MainApp
类,使用 Spring 容器加载配置文件并获取 HelloSpring
对象:
package com.example;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {public static void main(String[] args) {// 加载 Spring 配置文件ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 从容器中获取 HelloSpring 对象HelloSpring helloSpring = (HelloSpring) context.getBean("helloSpring");// 调用 HelloSpring 的方法helloSpring.sayHello();// 关闭 Spring 容器((ClassPathXmlApplicationContext) context).close();}
}
1.2.2.5 运行结果
运行 MainApp
类,你会看到以下输出:
Hello, Spring Framework
恭喜!你已经成功运行了第一个 Spring 应用!
1.3 Spring 核心概念 - IoC(控制反转)
1.3.1 IoC 的基本概念和原理
控制反转(Inversion of Control,简称 IoC)是 Spring 的核心概念之一。它的作用是将对象的创建和依赖关系交给 Spring 容器管理,而不是直接在代码中硬编码。
IoC 的主要优点包括:
-
解耦:对象的创建和使用分离,代码更加灵活。
-
易于维护:修改对象的创建方式或依赖关系时,只需要更改配置文件。
1.3.2 通过 XML 配置实现 IoC
在 applicationContext.xml
中配置一个 Car
对象:
<bean id="car" class="com.example.Car"><constructor-arg value="Toyota"/>
</bean>
在 Java 代码中使用:
Car car = (Car) context.getBean("car");
1.3.3 通过注解实现 IoC
Spring 还支持注解方式实现 IoC。在类上添加 @Component
注解:
@Component
public class Car {private String brand;public Car(String brand) {this.brand = brand;}public void display() {System.out.println("Car Brand: " + brand);}
}
在配置文件中启用组件扫描:
<context:component-scan base-package="com.example"/>
使用注解方式获取对象:
Car car = (Car) context.getBean("car");
1.3.4 IoC 容器的操作(获取 Bean 等)
IoC 容器是 Spring 管理对象的核心组件。可以通过以下方式操作 Bean:
-
获取 Bean:
context.getBean("beanName")
-
关闭容器:
((ClassPathXmlApplicationContext) context).close();
1.4 Spring 核心概念 - AOP(面向切面编程)
1.4.1 AOP 的概念和作用
面向切面编程(Aspect-Oriented Programming,简称 AOP)是一种编程范式,允许开发者将横切关注点(如日志记录、事务管理)与业务逻辑分离。
AOP 的主要作用包括:
-
代码复用:将公共功能封装成切面。
-
减少重复代码:避免在多个地方重复实现相同的功能。
1.4.2 使用 XML 配置 AOP
定义一个切面类 LoggingAspect
:
public class LoggingAspect {public void beforeAdvice() {System.out.println("Before method execution.");}public void afterAdvice() {System.out.println("After method execution.");}
}
在 applicationContext.xml
中配置 AOP:
<aop:config><aop:aspect id="loggingAspect" ref="loggingAspect"><aop:before pointcut="execution(* com.example.*.*(..))" method="beforeAdvice"/><aop:after pointcut="execution(* com.example.*.*(..))" method="afterAdvice"/></aop:aspect>
</aop:config><bean id="loggingAspect" class="com.example.LoggingAspect"/>
1.4.3 基于注解的 AOP
定义一个切面类 AnnotationLoggingAspect
:
@Aspect
@Component
public class AnnotationLoggingAspect {@Before("execution(* com.example.*.*(..))")public void beforeAdvice() {System.out.println("Before method execution (Annotation).");}@After("execution(* com.example.*.*(..))")public void afterAdvice() {System.out.println("After method execution (Annotation).");}
}
在 applicationContext.xml
中启用注解支持:
<aop:aspectj-autoproxy/>
<context:component-scan base-package="com.example"/>
1.4.4 AOP 的实际应用场景
AOP 的常见应用场景包括:
-
日志记录:在方法调用前后记录日志。
-
事务管理:在方法执行前后处理事务。
-
性能监控:记录方法的执行时间。
1.5 总结
在本章中,我们学习了 Spring 框架的基本概念、环境搭建以及如何创建一个简单的 Spring 应用。主要知识点包括:
-
Spring 是一个轻量级的 Java 开发框架。
-
环境搭建需要 JDK、IDE 和 Maven。
-
通过
applicationContext.xml
配置文件和 Spring 容器实现控制反转(IoC)。 -
IoC 的主要作用是解耦和提高代码的灵活性。
-
AOP 提供了一种在不修改代码的前提下,动态添加额外功能的方式。
接下来,我们将深入学习 Spring 的核心模块和高级特性,帮助你逐步成为 Spring 的高手!如果你在学习过程中遇到任何问题,欢迎随时提问。