Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • 服务器tutorial
  • spring

    • spring
    • spring base
      • structure
        • spring-messaging
        • Actuator
      • annotation
        • Spring MVC 和 REST 注解
        • @RestController
      • 原理
        • autowired 原理
        • IOC 的实现机制
        • Spring AOP 与 AspectJ AOP
      • other
        • ConfigurableApplicationContext 接口
        • BeanDefinition
        • AttributeAccessor
        • lazy 注解
  • 数据库

  • 运维

  • other

  • 《server》
  • spring
Jacky
2023-09-13
目录

spring base

# structure

# spring-messaging

org.springframework:spring-messaging

spring-messaging 模块是 Spring Framework 的一个子模块, 用于支持消息驱动的应用程序开发。它提供了在 Spring 应用程序中处理消息的基础设施, 包括消息传递、消息处理、消息监听和消息调度等功能。以下是关于 spring-messaging 模块的一些重要信息:

  • 核心概念: spring-messaging 模块引入了一些核心概念, 包括消息通道(Message Channel)、消息处理器(Message Handler)、消息转换器(Message Converter)等。这些概念为消息驱动的编程提供了基础, 允许你通过消息传递实现松散耦合的组件之间的通信

  • 消息通道: 消息通道是消息在 Spring 应用程序中流动的通道。spring-messaging 模块定义了不同类型的消息通道, 包括发布-订阅通道(Publish-Subscribe Channel)、点对点通道(Point-to-Point Channel)、广播通道(Broadcast Channel)等。这些通道允许你以不同的方式组织和路由消息

  • 消息处理器: 消息处理器是用于处理接收到的消息的组件。Spring 提供了许多内置的消息处理器, 例如, 用于将消息发送到方法的适配器、用于将消息广播给订阅者的广播处理器等。你还可以自定义消息处理器以满足特定的业务需求

  • 消息监听: spring-messaging 模块支持消息监听器, 允许你监听消息通道上的消息并在消息到达时触发特定的操作。这对于异步处理消息非常有用, 例如, 处理来自消息队列的消息或 WebSocket 中的实时消息

  • 消息调度: 该模块还提供了消息调度的功能, 允许你定期发送消息或执行定时任务。这对于调度后台任务或发送定期报告等场景非常有用

  • 消息转换器: spring-messaging 模块包括消息转换器, 用于将消息从一种格式转换为另一种格式。这对于将消息转换为 JSON、XML 或其他自定义格式非常有用, 以满足消息的序列化和反序列化需求

  • 集成其他消息系统: 该模块还提供了与其他消息系统(如 Apache Kafka、RabbitMQ 等)的集成支持, 使得在 Spring 应用程序中与这些消息系统进行交互更加容易

总之, spring-messaging 模块为 Spring 应用程序提供了处理消息的强大功能, 可以用于构建消息驱动的应用程序、异步处理、实时通信以及与消息队列和消息中间件的集成。它为开发者提供了一个灵活的消息处理框架, 有助于实现松散耦合的组件之间的通信和协作

# Actuator (opens new window)

Spring Boot Actuator 模块提供了生产级别的功能, 比如健康检查, 审计, 指标收集, HTTP 跟踪等, 帮助我们监控和管理 Spring Boot 应用

# annotation

Spring 最常用的 36 个注解大全, 你都会了吗 (opens new window)

# Spring MVC 和 REST 注解

# @RestController

@RestController是 Spring Framework 中的一个注解, 用于标识一个类是 RESTful 风格的控制器(Controller)。与传统的 Spring MVC 控制器不同, @RestController注解告诉 Spring 框架, 该控制器返回的不是视图(HTML、JSP 等), 而是数据, 通常以 JSON 格式返回给客户端。这意味着使用@RestController的类中的方法通常用于处理 RESTful API 请求

具体来说, **@RestController 注解的作用包括: **

  • 组合注解: @RestController 注解实际上是@Controller 和@ResponseBody 两个注解的组合。@Controller 标识该类是一个控制器, 而@ResponseBody 表示方法返回的数据将被直接写入 HTTP 响应体中, 而不是被解释为视图名称

  • 返回数据: @RestController 标识的类中的方法通常返回领域对象、数据对象或 DTO(数据传输对象)。这些数据对象将以 JSON 或 XML 等格式直接返回给客户端, 而不是渲染到视图中

  • 简化开发: 使用@RestController 可以简化开发 RESTful API 的过程, 因为开发人员无需处理视图解析和模型视图的问题, 只需关注数据的处理和响应

# 原理

# autowired 原理

1

# IOC 的实现机制

好的, 这个问题我会从几个方面来回答

  • IOC 是什么 IOC 的全称是 Inversion Of Control, 也就是控制反转, 它的核心思想是把对象的管理权限交给容器
  • Bean 的声明方式 应用程序如果需要使用到某个对象实例, 直接从 IOC 容器中去获取就行, 这样设计的好处是降低了程序里面对象与对象之间的耦合性
  • IOC 的工作流程: Spring IOC 的工作流程大致可以分为三个阶段
    • IOC 容器的初始化
    • 完成 Bean 初始化及依赖注入
    • Bean 的使用

图解: IOC 执行流程 IOC执行流程

图解: 执行步骤 执行步骤

链接

  • IOC 执行流程及 bean 生命周期和作用域总结 (opens new window)
  • spring-ioc (opens new window)
  • 面试官: 介绍下 Spring IoC 的工作流程 你会怎么回答? (opens new window)

# Spring AOP 与 AspectJ AOP

Spring AOP 属于运行时增强, 而 AspectJ 是编译时增强。 Spring AOP 基于代理(Proxying), 而 AspectJ 基于字节码操作(Bytecode Manipulation)

# other

# ConfigurableApplicationContext 接口

介绍 spring 中的 ConfigurableApplicationContext 接口

ConfigurableApplicationContext 接口是 Spring 框架中的一个重要接口, 它扩展了 ApplicationContext 接口, 提供了一些用于配置和控制应用上下文的额外方法。这个接口的主要目的是允许开发人员对应用上下文进行更高级别的配置和管理

以下是 ConfigurableApplicationContext 接口的一些重要方法和功能:

  • refresh()方法:: 这是 ConfigurableApplicationContext 最重要的方法之一。它用于刷新应用上下文, 重新加载所有 bean 定义, 并触发 bean 的初始化。通常, 在创建应用上下文之后, 您需要调用 refresh()方法才能使其生效

  • registerShutdownHook()方法:: 这个方法用于注册一个 JVM 关闭钩子, 以确保在 JVM 关闭时正常关闭 Spring 应用上下文。这对于释放资源和执行清理操作非常有用

  • close()方法:: 这个方法用于关闭应用上下文。在应用程序完成后, 应该显式调用 close()方法以释放资源和清理应用上下文

  • setId(String id):: 设置应用上下文的唯一标识符, 通常作为一个字符串。这可以用于标识不同的应用上下文

  • setDisplayName(String displayName):: 设置应用上下文的显示名称, 通常用于日志和诊断目的

  • setParent(ApplicationContext parent):: 设置父应用上下文。这允许您创建多层次的应用上下文体系结构, 其中子上下文可以访问父上下文中定义的 bean

  • addApplicationListener(ApplicationListener<?> listener):: 注册一个应用程序事件监听器, 以便在应用上下文中的事件发生时接收通知

  • setEnvironment(ConfigurableEnvironment environment):: 设置应用上下文的环境, 包括属性源和配置文件的处理

ConfigurableApplicationContext 接口的实现类包括 GenericApplicationContext 和 AnnotationConfigApplicationContext 等。这些实现类提供了不同的应用上下文配置方式, 允许您使用 XML 配置、注解配置或混合配置等多种方式来构建应用上下文

总之, ConfigurableApplicationContext 接口为 Spring 应用程序提供了更高级别的配置和管理功能, 允许您以更灵活的方式控制应用上下文的行为和生命周期。这对于大型和复杂的应用程序特别有用

# BeanDefinition

在 Spring 框架中, BeanDefinition 是一个重要的概念, 它用于描述 Spring 容器中的 Bean 的元数据信息, 包括 Bean 的类名、依赖关系、作用域、生命周期回调等信息。BeanDefinition 的主要作用是告诉 Spring 容器如何创建和管理 Bean

以下是 BeanDefinition 的一些关键属性和功能:

  • Bean 的类名: BeanDefinition 包括一个属性, 用于指定要创建的 Bean 的完全限定类名。这告诉 Spring 容器要实例化哪个类来创建 Bean

  • Bean 的作用域: BeanDefinition 可以指定 Bean 的作用域, 例如 Singleton(单例)或 Prototype(原型)。Singleton 表示在容器中只有一个 Bean 实例, 而 Prototype 表示每次请求都创建一个新的实例

  • 依赖关系: BeanDefinition 可以描述 Bean 与其他 Bean 之间的依赖关系。这包括构造函数注入、属性注入和方法注入等

  • 初始化和销毁回调: 您可以通过 BeanDefinition 指定 Bean 的初始化方法和销毁方法。这些方法在 Bean 的生命周期中自动调用

  • Bean 的懒加载: BeanDefinition 可以指定 Bean 是否懒加载。如果设置为懒加载, Bean 将在首次访问时才被实例化

  • Bean 的描述信息: BeanDefinition 可以包含一个描述信息, 通常用于提供有关 Bean 用途和配置的文档

BeanDefinition 是 Spring IoC 容器的核心概念之一, 它允许开发人员以声明性的方式配置应用程序中的 Bean, 而不需要硬编码 Bean 的创建和管理。通常, BeanDefinition 由配置文件(如 XML 配置文件或 Java 配置类)中的 Bean 定义来创建和填充

以下是一个示例 XML 配置中的 BeanDefinition:

<bean id="myBean" class="com.example.MyBean">
    <property name="name" value="John"/>
    <property name="age" value="30"/>
</bean>
1
2
3
4

在这个示例中, BeanDefinition 描述了一个名为 myBean 的 Bean, 它是 com.example.MyBean 类的实例, 并且有两个属性 name 和 age, 它们被设置为"John"和 30

总之, BeanDefinition 是 Spring 框架中用于定义和配置 Bean 的关键元素, 它使开发人员能够以灵活和可维护的方式管理应用程序中的 Bean。通过使用 BeanDefinition, Spring 容器可以根据描述信息创建和管理 Bean 的实例, 从而实现了 IoC(Inversion of Control)的概念

# AttributeAccessor

AttributeAccessor 接口是 Spring Framework 中的一个接口, 用于提供在对象上设置和获取属性(attributes)的通用方法。属性通常是与对象关联的附加信息, 它们可以用于各种用途, 如配置、元数据、状态管理等。AttributeAccessor 接口定义了以下方法:

  • void setAttribute(String name, Object value): 通过名称设置一个属性的值

  • Object getAttribute(String name): 通过名称获取属性的值

  • Object removeAttribute(String name): 通过名称删除属性, 并返回被删除的属性的值

  • boolean hasAttribute(String name): 检查是否存在具有指定名称的属性

  • String[] attributeNames(): 获取所有属性名称的数组

AttributeAccessor 接口通常由 Spring 框架内部使用, 以及一些与 Spring 集成的第三方库使用, 来处理对象上的属性。这个接口的一个常见用途是处理 Bean 的属性, 例如在 BeanFactory 和 ApplicationContext 中, 这些容器可以使用 AttributeAccessor 来管理 Bean 的配置属性

此外, Spring 提供了几个实现 AttributeAccessor 接口的类, 如 AbstractAttributeAccessor, 它提供了通用的属性操作方法的默认实现。开发人员也可以实现 AttributeAccessor 接口来自定义对象的属性操作行为

总之, AttributeAccessor 接口提供了一种通用的方式来处理对象上的属性, 使开发人员可以轻松地设置、获取和管理这些属性, 从而增强了 Spring 框架的灵活性和可扩展性

# lazy 注解

在 Spring 框架中, @Lazy 注解用于控制 bean 的懒加载行为。懒加载是指在应用程序启动时不立即创建 bean 实例, 而是在第一次访问该 bean 时才进行创建。这可以帮助提高应用程序的性能, 尤其是在应用程序中存在大量的 bean 时

使用@Lazy 注解, 您可以将其应用于 Spring 的 bean 定义, 以指示 Spring 容器在需要时才创建该 bean。以下是一些关于@Lazy 注解的重要信息:

  1. 使用方式: 要将@Lazy 注解应用于 bean, 只需将它放置在 bean 定义的类上。例如:
@Component
@Lazy
public class MyLazyBean {
    // Bean的定义
}
1
2
3
4
5

在这个示例中, MyLazyBean 将作为懒加载 bean 进行创建

  1. 默认值: 如果您没有显式指定@Lazy 注解, Spring 容器会默认使用懒加载行为

  2. 使用场景: 懒加载通常用于那些在应用程序启动时不需要立即初始化的 bean, 特别是对于一些资源密集型的 bean。这可以帮助减少启动时间和内存占用

  3. 注意事项:

  • 懒加载可能会导致在访问懒加载 bean 时出现延迟, 因为 Spring 容器要在需要时才创建 bean 实例
  • 懒加载适用于单例作用域的 bean, 默认情况下, 所有 Spring bean 都是单例的

总之, @Lazy 注解是 Spring 中用于懒加载 bean 的一种方式, 它允许您在需要时才创建 bean 实例, 从而提高应用程序的性能和资源利用率

#tutorial
上次更新: 2025/10/09, 22:06:28
spring
database

← spring database→

最近更新
01
npx 使用指南
10-12
02
cursor
09-28
03
inspect
07-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式