spring相关知识

Spring 是 Java 生态系统中最流行的框架之一,提供了丰富的功能和模块,用于构建企业级应用。以下是 Spring、Spring Boot、Spring MVC 和 Spring Cloud 的知识汇总,涵盖了它们的基本概念、核心特性、使用场景和常见问题。


1. Spring 框架

1.1 基本概念

  • 定义:Spring 是一个轻量级的开源框架,用于构建企业级应用。
  • 核心特性
    • 依赖注入(DI):通过 @Autowired 或 XML 配置实现对象之间的依赖关系。
    • 面向切面编程(AOP):通过切面实现横切关注点(如日志、事务管理)的模块化。
    • 事务管理:支持声明式和编程式事务管理。
    • 数据访问:提供对 JDBC、ORM(如 Hibernate)的支持。

1.2 核心模块

  • Spring Core:提供依赖注入和 IoC 容器。
    IoC(控制反转)是Spring的核心思想,通过依赖注入(DI)将对象的创建和依赖关系的管理交给Spring容器。
  • Spring AOP:提供面向切面编程支持。
  • Spring JDBC:简化 JDBC 操作。
    JDBC连接数据库的步骤包括:加载驱动、建立连接、创建Statement、执行SQL、处理结果集、关闭连接。
  • Spring ORM:集成 ORM 框架(如 Hibernate)。
  • Spring Web:提供 Web 开发支持。

1.3 生命周期

Spring 生命周期是指 Spring 容器管理 Bean 的创建、初始化、使用和销毁的过程。

  • Bean 定义加载
    Spring 容器加载 Bean 的定义(通过 XML、注解或 Java 配置)。
  • 实例化(Instantiation)
    Spring 容器根据配置或注解创建 Bean 的实例。
    通过构造函数或工厂方法创建 Bean。
  • 属性赋值(Population of Properties)
    Spring 容器将配置的属性值或依赖注入到 Bean 中。
    通过 @Autowired、@Value 或 XML 配置实现依赖注入。
  • BeanPostProcessor 的前置处理
    调用所有 BeanPostProcessor 的 postProcessBeforeInitialization 方法。
  • 初始化(Initialization)
    Spring 容器调用 Bean 的初始化方法。
    1)调用 @PostConstruct 注解的方法。
    2)调用 InitializingBean 的 afterPropertiesSet 方法。
    3)调用自定义的初始化方法(通过 XML 配置或 @Bean 的 initMethod 属性)。
  • BeanPostProcessor 的后置处理
    调用所有 BeanPostProcessor 的 postProcessAfterInitialization 方法。
  • 使用(In Use)
    Bean 已经准备好,可以被应用程序使用。
    应用程序通过 Spring 容器获取 Bean 并调用其方法。
  • 销毁(Destruction)
    Spring 容器在关闭时调用 Bean 的销毁方法。
    1)调用 @PreDestroy 注解的方法。
    2)调用 DisposableBean 的 destroy 方法。
    3)调用自定义的销毁方法(通过 XML 配置或 @Bean 的 destroyMethod 属性)。

其中Bean 的实例化、属性赋值、初始化、使用和销毁为核心阶段。

1.4 Spring 生命周期的扩展点

Spring 提供了多个扩展点,允许开发者在 Bean 的生命周期中插入自定义逻辑。以下是常见的扩展点。

  • BeanPostProcessor
    作用:在 Bean 初始化前后执行自定义逻辑。
    实现方法
    1)postProcessBeforeInitialization:在初始化之前调用。
    2)postProcessAfterInitialization:在初始化之后调用。
    示例
public class CustomBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        System.out.println("Before Initialization: " + beanName);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        System.out.println("After Initialization: " + beanName);
        return bean;
    }
}
  • BeanFactoryPostProcessor
    作用:在 Bean 工厂加载 Bean 定义之后、实例化 Bean 之前执行自定义逻辑。
    实现方法
    1)postProcessBeanFactory:在 Bean 工厂加载 Bean 定义之后调用
    示例
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
        System.out.println("BeanFactoryPostProcessor: Modifying bean definitions");
    }
}
  • InitializingBean 和 DisposableBean
    作用:在 Bean 初始化和销毁时执行自定义逻辑。
    实现方法
    1)afterPropertiesSet:在 Bean 初始化时调用。
    2)destroy:在 Bean 销毁时调用。
    示例
public class CustomBean implements InitializingBean, DisposableBean {
    @Override
    public void afterPropertiesSet() {
        System.out.println("InitializingBean: afterPropertiesSet");
    }

    @Override
    public void destroy() {
        System.out.println("DisposableBean: destroy");
    }
}
  • @PostConstruct 和 @PreDestroy
    作用:在 Bean 初始化和销毁时执行自定义逻辑。
    实现方法
    1)@PostConstruct:在 Bean 初始化时调用。
    2)@PreDestroy:在 Bean 销毁时调用。
    示例
public class CustomBean {
    @PostConstruct
    public void init() {
        System.out.println("@PostConstruct: init");
    }

    @PreDestroy
    public void cleanup() {
        System.out.println("@PreDestroy: cleanup");
    }
}

1.5 使用场景

  • 企业级应用:如 CRM、ERP 系统。
  • Web 应用:如电商网站、社交平台。

2. Spring Boot

2.1 基本概念

  • 定义:Spring Boot 是 Spring 的扩展,用于简化 Spring 应用的开发和部署。
  • 核心特性
    • 自动配置:根据类路径和配置自动配置 Spring 应用。
    • 嵌入式服务器:内置 Tomcat、Jetty 等服务器,无需单独部署。
    • 起步依赖:通过 spring-boot-starter-* 简化依赖管理。
    • Actuator:提供生产级监控和管理功能。

2.2 核心模块

  • Spring Boot Starter:提供各种起步依赖。
  • Spring Boot Actuator:提供应用监控和管理功能。
  • Spring Boot CLI:提供命令行工具,快速创建和运行 Spring Boot 应用。

2.3 使用场景

  • 微服务:快速构建和部署微服务应用。
  • RESTful API:快速开发 RESTful API。
  • 原型开发:快速构建和测试原型应用。

3. Spring MVC

3.1 基本概念

  • 定义:Spring MVC 是 Spring 框架的一个模块,用于构建基于 MVC 模式的 Web 应用。
  • 核心特性
    • 控制器(Controller):处理用户请求并返回视图或数据。
    • 视图解析器(View Resolver):将逻辑视图名称解析为实际视图。
    • 数据绑定:将请求参数绑定到模型对象。
    • 表单处理:支持表单验证和数据绑定。

3.2 核心组件

  • DispatcherServlet:前端控制器,负责请求的分发和处理。
  • HandlerMapping:映射请求到处理器(Controller)。
  • Controller:处理请求并返回模型和视图。
  • ViewResolver:解析视图名称并返回实际视图。

3.3 使用场景

  • Web 应用:如电商网站、社交平台。
  • RESTful API:提供 RESTful 接口。

4. Spring Cloud

4.1 基本概念

  • 定义:Spring Cloud 是 Spring 的扩展,用于构建分布式系统和微服务架构。
  • 核心特性
    • 服务发现:通过 Eureka 或 Consul 实现服务注册与发现。
    • 负载均衡:通过 Ribbon 实现客户端负载均衡。
    • 配置管理:通过 Spring Cloud Config 实现集中式配置管理。
    • 断路器:通过 Hystrix 实现故障容错。

4.2 核心模块

  • Spring Cloud Netflix:集成 Netflix OSS(如 Eureka、Hystrix)。
  • Spring Cloud Config:提供集中式配置管理。
  • Spring Cloud Gateway:提供 API 网关功能。
  • Spring Cloud Sleuth:提供分布式跟踪功能。

4.3 使用场景

  • 微服务架构:构建和部署微服务应用。
  • 分布式系统:如电商平台、金融系统。

5. 常见问题与解决方案

5.1 Spring 中的循环依赖

  • 问题:两个或多个 Bean 相互依赖,导致无法正确注入。
  • 解决方案
    • 使用 @Lazy 延迟加载。
    • 使用 @Autowiredsetter 方法注入。

5.2 Spring Boot 自动配置失效

  • 问题:自动配置未按预期工作。
  • 解决方案
    • 检查类路径和配置。
    • 使用 @EnableAutoConfiguration@SpringBootApplication 启用自动配置。

5.3 Spring MVC 中的跨域问题

  • 问题:前端请求跨域时被浏览器阻止。
  • 解决方案
    • 使用 @CrossOrigin 注解启用跨域支持。
    • 配置 CorsFilterWebMvcConfigurer

5.4 Spring Cloud 中的服务发现失败

  • 问题:服务无法注册到 Eureka 或 Consul。
  • 解决方案
    • 检查服务配置和网络连接。
    • 确保 Eureka 或 Consul 服务正常运行。

6. 最佳实践

6.1 使用 Spring Boot 简化开发

  • 实践:使用 Spring Boot 的起步依赖和自动配置,快速构建和部署应用。

6.2 使用 Spring Cloud 构建微服务

  • 实践:使用 Spring Cloud 的服务发现、负载均衡和配置管理,构建分布式系统。

6.3 使用 Spring MVC 构建 RESTful API

  • 实践:使用 Spring MVC 的注解和功能,快速开发 RESTful API。

6.4 使用 Spring AOP 实现横切关注点

  • 实践:使用 Spring AOP 实现日志、事务管理等横切关注点。

总结

  • Spring:提供依赖注入、AOP、事务管理等核心功能。
  • Spring Boot:简化 Spring 应用的开发和部署,支持自动配置和嵌入式服务器。
  • Spring MVC:用于构建基于 MVC 模式的 Web 应用和 RESTful API。
  • Spring Cloud:用于构建分布式系统和微服务架构,提供服务发现、负载均衡、配置管理等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值