Spring 框架教程

全面的 Spring 框架学习指南

目录

1. Spring 框架概述

Spring 框架是一个开源的 Java 平台,为开发 Java 应用程序提供全面的基础架构支持。Spring 的主要优势包括:

Spring 框架架构

Spring 框架的整体架构图

2. IoC 容器

控制反转(Inversion of Control)是 Spring 框架的核心概念。IoC 容器负责对象的创建、配置和管理它们的生命周期。

2.1 IoC 容器工作原理

IoC 容器工作原理

IoC 容器工作原理图

2.2 配置方式

Spring 支持两种配置方式:

// 基于 Java 的配置示例
@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

3. AOP 面向切面编程

AOP 允许将横切关注点(如日志、事务、安全等)从主业务逻辑中分离出来。

3.1 AOP 核心概念

AOP 核心概念

AOP 核心概念图

3.2 切面示例

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Before method: " + joinPoint.getSignature().getName());
    }
}

4. Bean 管理

Spring Bean 是 Spring 容器管理的对象。容器负责创建、配置和管理 Bean 的生命周期。

4.1 Bean 生命周期

Bean 生命周期

Bean 生命周期图

4.2 Bean 作用域

5. 依赖注入

依赖注入是 Spring 框架实现 IoC 的主要方式。

5.1 依赖注入方式

依赖注入方式

依赖注入方式图

5.2 注入示例

@Component
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

6. 事务管理

Spring 提供了声明式和编程式事务管理。

6.1 事务特性

事务 ACID 特性

事务 ACID 特性图

6.2 声明式事务示例

@Transactional
public void transferMoney(Account from, Account to, BigDecimal amount) {
    from.debit(amount);
    to.credit(amount);
}

7. Spring MVC

Spring MVC 是一个基于 MVC 设计模式的 Web 框架。

7.1 MVC 架构

Spring MVC 架构

Spring MVC 架构图

7.2 控制器示例

@RestController
@RequestMapping("/api/users")
public class UserController {
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.findById(id);
    }
}

8. 数据访问

Spring 提供了多种数据访问方式,包括 JDBC、ORM 等。

8.1 数据访问层

数据访问层架构

数据访问层架构图

8.2 JPA 示例

@Repository
public interface UserRepository extends JpaRepository {
    List findByEmail(String email);
}

9. 安全框架

Spring Security 提供了全面的安全解决方案。

9.1 安全架构

Spring Security 架构

Spring Security 架构图

9.2 安全配置示例

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/public/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin();
    }
}

10. 测试支持

Spring 提供了全面的测试支持,包括单元测试和集成测试。

10.1 测试架构

Spring 测试架构

Spring 测试架构图

10.2 测试示例

@SpringBootTest
class UserServiceTest {
    @Autowired
    private UserService userService;

    @Test
    void testCreateUser() {
        User user = new User("test@example.com");
        User saved = userService.createUser(user);
        assertNotNull(saved.getId());
    }
}