【Spring学习】

发布于:2025-04-22 ⋅ 阅读:(24) ⋅ 点赞:(0)

Spring学习

简介

Spring 是一个开源的 Java 企业级开发框架,最核心的特点是:

  • IOC(控制反转)
  • AOP(面向切面编程)

它有完整的生态:

  • 🚀 Spring Boot:用于快速构建服务
  • 🔒 Spring Security:做权限认证
  • ☁️ Spring Cloud:做微服务

现在很多 Java 项目基本都是以 Spring Boot 为基础搭建的。


核心特点

IOC(控制反转)

简介
  • Inversion of Control

  • 它是一种思想,核心理念是:把“创建对象 + 管理依赖”的控制权从代码中交给框架(比如 Spring)。

  • DI(依赖注入)

    • Dependency Injection
    • 它是实现 IOC 的一种方式,也是 Spring 中最常用的方式(使用注解 @Autowired)。

关系总结:

概念 说明
IOC 理念(控制权的转移)
DI 手段(实现方式)

在 Spring 中:

  • DI 让我们不用手动 new 对象
  • 框架会根据配置自动注入依赖

Bean

Spring的核心理念之一是 IOC(控制反转),即通过 Spring 容器来管理对象的创建和生命周期。这些对象都可以称为 Bean


简介
  • Bean 是指由 Spring 容器管理的一个对象
  • Spring 使用 IOCDI 机制来管理应用程序中的对象
  • Bean 可以是任何类的实例,Spring 会负责它的创建、配置和生命周期管理

特点
  • 由 Spring 容器(通常是 ApplicationContext)管理的对象
  • 在 Spring 配置文件中或通过注解(如 @Component@Service@Repository@Controller 等)定义的,并由 Spring 容器自动创建和管理。
  • Spring 容器会负责实例化这些对象,注入它们的依赖关系,并在应用程序运行时进行管理。

生命周期
  • 在容器启动时被创建(实例化)
  • 在应用程序的生命周期内保持可用
  • Spring 管理其完整生命周期,包括初始化和销毁过程

定义方式

1.通过注解定义,使用注解标记类为 Spring Bean:

@Service
public class UserService {
    // 业务逻辑
}

2.通过 XML 配置定义 Bean:在 applicationContext.xml 文件中,通过 标签定义 Bean。

<bean id="userService" class="com.example.UserService"/>

3.通过 Java 配置类定义 Bean:使用 @Configuration@Bean 等注解来定义 Bean。

@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserService();
    }
}

作用域(Scope)

Spring 允许你为 Bean 配置不同的作用域(scope),决定它的生命周期和创建时机。常见的作用域有:

  • singleton:默认作用域,Spring 容器中只会有一个 Bean 实例。
  • prototype:每次请求都会创建一个新的 Bean 实例。
  • request、session、application 等:这些是基于 web 应用的特定作用域,通常用于 web 项目中。

AOP切面编程

简介

AOP(面向切面编程)是一种编程思想,它的目标是将程序中那些 横切关注点(cross-cutting concerns)从主业务逻辑中分离出来。

📌 举例说明
在很多业务方法中都要做这些事:

  • 记录日志
  • 权限验证
  • 异常处理
  • 性能监控
  • 事务管理

这些跟业务逻辑(比如"下单"、“支付”、“查询用户信息”)无关但又必须做的操作就是横切关注点


功能

把通用代码抽出来统一处理,让业务代码更干净、更专注。


实现方式

Spring 提供了基于 代理机制(Proxy) 的 AOP 实现方式:

  • JDK 动态代理:针对接口
  • CGLIB 动态代理:针对类

核心概念
名称 说明
切面(Aspect) 封装横切逻辑的类,比如日志、事务、权限检查等
连接点(Join Point) 程序中可以插入切面逻辑的位置(通常是方法调用)
切入点(Pointcut) 定义要拦截哪些方法
通知(Advice) 指定在什么时候执行横切逻辑(比如:方法前/后/异常时)
织入(Weaving) 将切面代码织入到目标对象的过程

应用实例

日常开发中我们可能感觉不到AOP的存在,是因为很多AOP功能是Spring框架"自动实现"的,开发者实际上是在隐式使用AOP。

功能 实现方式 AOP实现机制
@Transactional 注解 开启事务管理 通过AOP织入事务逻辑
@Async 注解 方法异步调用 通过AOP织入异步代理逻辑
@Cacheable 注解 缓存处理 通过AOP织入缓存判断逻辑
@PreAuthorize 注解 方法级安全控制 基于Spring Security的AOP实现
Controller参数校验 @Valid 注解校验 通过AOP织入参数校验逻辑
@Retryable 注解 方法失败自动重试 基于Spring Retry的AOP实现

实现特点:

  • 这些功能本质上都是通过Spring AOP或AspectJ实现的
  • Spring Boot自动配置会为这些功能自动创建代理对象
  • 默认使用运行时织入(Runtime Weaving)方式
  • 在方法内部调用时可能失效(因为绕过了代理机制)

Spring 生态系统

"生态"指的是围绕Spring核心框架,衍生出来的一整套子项目和解决方案,它们可以无缝协作,覆盖一个大型项目从开发、测试、部署、运维到监控的整个生命周期。


核心组件
模块 功能描述
Spring Framework 核心框架,提供IOC、AOP、事务管理等基础功能
Spring Boot 快速构建独立运行的Spring应用,简化配置、开箱即用
Spring MVC/WebFlux MVC是传统同步模型,WebFlux是响应式非阻塞模型
Spring Data 简化数据库操作(支持JPA、MongoDB、Redis等)
Spring Security 提供认证和授权的安全框架
Spring Cloud 微服务架构解决方案(服务注册发现、配置中心、断路器等)
Spring Batch 批处理任务解决方案(大数据量、定时处理)
Spring Integration 面向消息驱动架构的集成方案(适合构建分布式系统)
Spring Test 提供测试支持,方便进行单元测试和集成测试

生态优势

统一风格:所有模块遵循同一套设计理念,学习一个就能用一片
高扩展性:可以单独使用部分模块,也能组合多个模块构建复杂系统
社区活跃:拥有强大的开源社区和丰富的生态资源
兼容性好:与Docker、Kubernetes、主流消息队列、数据库和云平台无缝集成
持续演进:定期更新迭代,保持技术先进性


典型应用场景
  • 企业级应用开发
  • 微服务架构
  • 云原生应用
  • 批处理系统
  • 响应式编程

Spring Boot

简介

是 Spring 官方推出的一个快速开发框架,用于简化 Spring 应用的搭建和开发过程,即spring快速开发脚手架,可对比vue开发脚手架进行学习。

目标:

  • 快速搭建项目
  • 减少繁琐配置
  • 提供开箱即用的解决方案(依赖管理、配置、内嵌服务器等)

Spring Boot 与 Spring 的关系

Spring 是一个功能强大但配置相对复杂的底层框架;
Spring Boot 是基于 Spring 的快速开发工具,提供自动配置、依赖整合、快速启动等能力。

对比项 Spring Spring Boot
本质 底层开发框架 快速开发框架(工具 + 配置封装)
配置方式 手动配置较多(XML/Java) 自动配置为主,默认约定优于配置
启动方式 通常打包部署到容器 内嵌 Tomcat,main 方法直接运行
目标 灵活,功能全面 简化开发,提高效率

核心特性

  • 自动配置:根据依赖和类路径自动配置项目所需的功能。
  • Starter 起步依赖:通过 spring-boot-starter-xxx 快速引入一整套所需依赖。
  • 内嵌 Web 服务器:默认集成 Tomcat,无需打包成 war 部署。
  • 统一配置文件:集中管理配置项(application.ymlapplication.properties)。
  • 快速启动机制:通过 SpringApplication.run() 启动整个项目。
  • 无缝集成 Spring 生态:Spring Security、Spring Data、Spring Cloud 等可直接整合。

网站公告

今日签到

点亮在社区的每一天
去签到