第1~4章中我们学习了MyBatis框架,这也是同学们接触的第一个框架。在学习和练习的过程中可以深刻体会到框架的强大之处及给开发人员带来的便利。(如果没有了解可以去我主页看看 第一至四章 的内容来学习)。从本章开始,将学习另一个非常重要的框架——Spring框架,这也是目前Java语言中最流行的框架。
5.1 Sping框架的历史由来
Spring框架是一个轻量级的企业级应用框架,兴起于2003年。当时流行的传统Java EE框架均为过于脆肿的"重量级"架构体系,其开发效率、开发难度和实现的性能都不能满足人们的需求。
Spring框架已经发展为一个功能丰富且易用的集成框架,其核心是一个完整的基于控制反转的轻量级容器,用户可以使用它建立自己的应用程序。在此容器之上,Spring框架提供了大量实用的服务,并将很多高质量的开源项目集成到统一的框架之上。
本章将带领同学们初步接触Spring框架的两个核心概念——IOC和AOP,感受Spring框架的神奇魅力。
5.2 Spring IOC
IOC的全称为Inversion of Control,即控制反转,意为把对资源的控制权反转过来。IOC不是一项开发技术,也不是具体功能,而是面向对象编程中的一种设计理念。
5.2.1 IOC和依赖注入
在Java中,IoC(控制反转)和依赖注入(Dependency Injection, DI)是紧密相关的概念,它们通常通过框架(如Spring)来实现。IoC是一种设计原则,用于减少代码间的耦合度,而依赖注入是实现IoC的一种具体方式。
下面我将用简单的Java代码示例来说明依赖注入的概念,但请注意,在纯Java中手动实现依赖注入可能会比较复杂且不易维护,因此通常建议使用像Spring这样的框架来自动处理依赖注入。不过,为了教学目的,我们可以手动模拟依赖注入的过程。
示例:手动实现依赖注入
假设我们有两个类,Car 和 Engine。Car 类依赖于 Engine 类。
Engine.java
public class Engine {
public void start() {
System.out.println("Engine started");
}
}
Car.java
在这个例子中,我们将通过构造函数来注入 Engine 依赖。
public class Car {
private Engine engine;
// 通过构造函数注入Engine依赖
public Car(Engine engine) {
this.engine = engine;
}
public void start() {
engine.start();
System.out.println("Car started");
}
}
Main.java
在 Main 类中,我们手动创建 Engine 和 Car 的实例,并将 Engine 实例注入到 Car 实例中。
public class Main {
public static void main(String[] args) {
// 创建Engine实例
Engine engine = new Engine();
// 创建Car实例,并将Engine实例注入到Car中
Car car = new Car(engine);
// 使用Car
car.start();
}
}
使用Spring框架实现依赖注入
在Spring框架中,依赖注入是通过配置文件(XML或注解)自动完成的,无需手动编写注入代码。
Car.java(使用Spring注解)
import org.springframework.beans.factory.annotation.Autowired;
public class Car {
private Engine engine;
// 使用@Autowired注解自动注入Engine依赖
@Autowired
public Car(Engine engine) {
this.engine = engine;
}
public void start() {
engine.start();
System.out.println("Car started");
}
}
然后,你需要在Spring的配置文件中声明 Engine 和 Car 的bean,或者使用Java配置类来配置它们。但是,由于这里只是代码示例,所以我没有展示完整的Spring配置。
请注意,Spring还支持其他类型的依赖注入,如通过setter方法注入、字段注入等,但构造函数注入是推荐的方式之一,因为它可以确保对象在被使用之前就已经被正确初始化。
5.2.2 第一个Spring程序
编写第一个Spring程序通常涉及几个基本步骤,包括设置Spring环境、创建一个简单的Spring Bean,以及编写一个主程序来启动Spring应用。下面是一个简单的例子,展示如何使用Spring Boot来快速搭建一个Spring程序。Spring Boot是Spring的一个子项目,它大大简化了基于Spring的应用开发。
1. 创建一个Maven项目
首先,你需要一个Java开发环境(如JDK)和Maven。然后,你可以使用任何IDE(如IntelliJ IDEA、Eclipse等)来创建一个新的Maven项目。
2. 添加Spring Boot依赖
在你的pom.xml文件中,添加Spring Boot的起步依赖(starter)。这里我们使用Spring Web Starter来创建一个简单的Web应用。
<dependencies>
<dependency>
<