Skip to content

Spring 6 简介

什么是Spring框架?

Spring是一个轻量级的Java开发框架,旨在简化企业级应用开发。Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP)。

Spring 6 新特性

Spring 6是Spring框架的最新主要版本,于2022年11月发布。主要特性包括:

基线要求

  • Java 17+:要求Java 17或更高版本
  • Jakarta EE 9+:从javax.迁移到jakarta.命名空间
  • 支持Java 21:完全支持最新的Java长期支持版本

核心改进

  • 原生编译支持:通过GraalVM实现原生镜像编译
  • 可观测性增强:改进的Micrometer集成
  • HTTP接口客户端:声明式HTTP接口的新特性
  • 性能优化:启动时间和内存占用的优化

核心概念

1. 控制反转 (IoC)

IoC是Spring框架的核心,它将对象的创建和依赖关系的管理交给Spring容器。

java
// 传统方式
public class UserService {
    private UserRepository userRepository = new UserRepository();
}

// Spring IoC方式
public class UserService {
    private final UserRepository userRepository;
    
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

2. 依赖注入 (DI)

DI是IoC的一种实现方式,Spring通过构造器注入、Setter注入或字段注入来提供依赖。

java
@Service
public class UserService {
    private final UserRepository userRepository;
    
    // 构造器注入(推荐)
    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

3. 面向切面编程 (AOP)

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

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

Spring 6 架构

Spring框架由多个模块组成:

  • Spring Core:核心容器,提供IoC和DI功能
  • Spring AOP:面向切面编程
  • Spring Data Access:数据访问/集成
  • Spring Web:Web应用支持
  • Spring Test:测试支持

快速开始

添加依赖

Maven:

xml
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>6.1.3</version>
</dependency>

创建第一个Spring应用

java
@Configuration
@ComponentScan("com.example")
public class AppConfig {
}

@Component
public class HelloWorld {
    public void sayHello() {
        System.out.println("Hello, Spring 6!");
    }
}

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = 
            new AnnotationConfigApplicationContext(AppConfig.class);
        HelloWorld helloWorld = context.getBean(HelloWorld.class);
        helloWorld.sayHello();
    }
}

下一步