
spring
文章平均质量分 87
一个憨憨coder
热爱
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring AI 实现 RAG
Spring AI框架实现RAG(检索增强生成)技术,整合了信息检索与生成模型,用于构建智能问答系统。该方案采用Spring Boot框架,支持多种大语言模型(如OpenAI、Qwen)和向量数据库(Elasticsearch)。核心流程包括:使用Tika读取多格式文档并向量化存储,进行相似性搜索匹配问题,通过提示词模板优化LLM生成质量。配置文件中可自定义嵌入模型、向量维度和相似性算法。Spring AI的模块化设计简化了RAG实现,但需注意版本兼容性和向量维度匹配问题。原创 2025-06-12 11:48:12 · 1148 阅读 · 0 评论 -
Spring 的 BeanFactory 和 FactoryBean
摘要:本文解析了Spring框架中BeanFactory和FactoryBean的核心区别与功能。BeanFactory是IoC容器的根接口,负责管理所有Bean的生命周期,提供getBean()等基础管理功能;而FactoryBean是一种工厂接口,用于封装复杂对象的创建逻辑(如MyBatis的SqlSessionFactoryBean),通过getObject()方法返回目标对象。关键区别在于前者是容器基础架构,后者是扩展机制,二者通过&前缀语法协同工作。典型应用包括AOP代理创建和ORM框架集原创 2025-05-30 10:32:20 · 936 阅读 · 0 评论 -
Spring 的 依赖注入
Spring依赖注入是Spring框架的核心特性,通过容器管理对象依赖关系,实现解耦和灵活性。支持构造器、Setter、字段(@Autowired)和方法注入。流程包括:1)加载配置;2)实例化Bean;3)属性填充(递归创建依赖);4)初始化(@PostConstruct);5)使用Bean。关键类如BeanFactory、ApplicationContext处理Bean创建和依赖管理。AbstractAutowireCapableBeanFactory负责具体注入逻辑,包括属性填充和自动装配(byNam原创 2025-05-29 17:29:20 · 1220 阅读 · 0 评论 -
Spring AOP 创建代理对象
Spring AOP的核心组件AopProxyFactory和AopProxy分别负责代理工厂的创建和代理对象的生成。DefaultAopProxyFactory根据配置决定使用JDK动态代理或CGLIB代理,而AopProxy接口则封装了具体的代理实现逻辑,包括JdkDynamicAopProxy和CglibAopProxy两种实现方式,使Spring AOP能够灵活应对不同场景的代理需求。原创 2025-05-29 11:50:19 · 960 阅读 · 0 评论 -
BeanPostProcessor 的调用
本文分析了Spring框架中三个核心Bean工厂类的层级关系与功能差异:AbstractBeanFactory提供基础实现但不支持自动装配;AbstractAutowireCapableBeanFactory扩展支持自动装配和完整生命周期管理;DefaultListableBeanFactory作为最完整实现,支持BeanDefinition注册和注解处理。重点解析了doCreateBean()方法的执行流程,包括实例化Bean、应用后处理器、解决循环依赖以及初始化过程,其中initializeBean()原创 2025-05-27 11:11:28 · 1044 阅读 · 0 评论 -
BeanPostProcessor 的注册
BeanPostProcessor是Spring框架的核心扩展点之一,主要用于在Bean初始化前后进行自定义处理。其核心方法postProcessBeforeInitialization()和postProcessAfterInitialization()分别在Bean初始化的前后执行,常用于实现AOP代理、对象包装等功能。在Spring容器启动时,通过AbstractApplicationContext.refresh()方法完成BeanPostProcessor的注册,其中registerBeanPos原创 2025-05-26 17:03:01 · 1736 阅读 · 0 评论 -
Spring 创建 Bean实例 的策略
Spring 创建 Bean实例 的策略原创 2025-05-25 20:42:57 · 889 阅读 · 0 评论 -
Spring 中的扩展点
Spring框架中的BeanDefinitionRegistryPostProcessor、BeanFactoryPostProcessor和BeanPostProcessor是三个核心扩展点,分别在容器启动的不同阶段发挥作用。BeanDefinitionRegistryPostProcessor(继承自BeanFactoryPostProcessor)允许动态注册Bean定义,优先于其他处理器执行;BeanFactoryPostProcessor在Bean定义注册完成后、实例化前修改配置;BeanPost原创 2025-05-24 11:08:19 · 1084 阅读 · 0 评论 -
Spring 三级缓存与AOP
Spring 框架通过三级缓存机制解决循环依赖问题,主要针对单例作用域下的字段注入和 setter 注入。循环依赖指两个或多个 Bean 相互依赖,如 A 依赖 B,B 又依赖 A,若无处理会导致无限递归。Spring 使用三个 Map 容器管理 Bean 的创建过程:一级缓存 singletonObjects 存储完全初始化的单例 Bean;二级缓存 earlySingletonObjects 存储未完成初始化的早期 Bean;三级缓存 singletonFactories 存储对象工厂,用于生成早期 B原创 2025-05-20 17:51:42 · 961 阅读 · 0 评论 -
Spring 异步初始化单例 Bean
Spring 框架中的 backgroundInit 和 CompletableFuture 是支持异步初始化单例 Bean的关键机制,确保非阻塞且并发安全的 Bean 初始化流程。在 Spring 容器启动时,默认通过 preInstantiateSingletons() 方法同步初始化所有非懒加载的单例 Bean。然而,某些 Bean 可以通过 backgroundInit 配置为后台线程初始化,避免阻塞主线程。核心方法 finishBeanFactoryInitialization(beanFacto原创 2025-05-20 11:50:53 · 324 阅读 · 0 评论 -
Spring 概念之 Environment
Spring 框架中的 Environment 接口是管理应用程序运行时配置环境的核心工具,负责处理属性解析、Profile 激活控制以及配置环境隔离(如开发、测试、生产环境)。它提供了统一的方式访问来自 JVM 参数、系统环境变量、配置文件(如 application.properties)等配置数据。Environment 接口的主要功能包括获取激活的 Profile、默认 Profile,以及判断 Profile 是否匹配。其子接口 ConfigurableEnvironment 进一步支持动态设置激原创 2025-05-19 16:10:57 · 354 阅读 · 0 评论 -
AnnotationConfigApplicationContext 简介
AnnotationConfigApplicationContext 是 Spring 框架中用于支持基于注解配置的核心容器类,属于 org.springframework.context.annotation 包。与传统的 ClassPathXmlApplicationContext 不同,它通过 Java 注解(如 @Component, @Service, @Configuration 等)来定义和管理 Bean。其基本使用方式包括定义配置类和使用 AnnotationConfigApplicatio原创 2025-05-18 17:35:58 · 1220 阅读 · 0 评论 -
Spring 的 BeanFactoryPostProcessor 与 BeanDefinitionRegistryPostProcessor
在 Spring 容器启动过程中,BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor 是两个关键的扩展点接口,用于在容器初始化阶段修改或注册 Bean 的定义信息(BeanDefinition)。BeanFactoryPostProcessor 允许在 BeanDefinition 加载完成后修改已有定义,而 BeanDefinitionRegistryPostProcessor 作为其子接口,能够在 BeanDefinition 注原创 2025-05-18 10:17:28 · 460 阅读 · 0 评论 -
@Async 实现原理
@Async 是 Spring 提供的一个用于实现异步方法调用的注解,能够在不阻塞主线程的情况下执行耗时操作。其底层原理依赖于 Spring AOP 和动态代理技术。使用 @Async 时,需要启用异步支持(@EnableAsync),并确保方法是 public 且不与其他调用者在同一类中。Spring 通过动态代理机制将带有 @Async 的方法封装成任务,提交给任务执行器(默认是 SimpleAsyncTaskExecutor)在新线程中执行。开发者可以自定义线程池配置,优化异步任务执行。常见问题包括原创 2025-05-17 10:25:32 · 835 阅读 · 0 评论 -
Spring 是如何排序多个 Advisor 的?
Spring AOP 通过 Ordered 接口或 @Order 注解对多个 Advisor 进行排序,以决定它们在拦截器链中的执行顺序。前置逻辑(Before)按 Order 值从小到大执行,而后置逻辑(After)则按 Order 值从大到小执行。Spring 使用 AdvisorComparator 来比较和排序 Advisor,优先使用 Ordered 接口或 @Order 注解的值,默认值为 Ordered.LOWEST_PRECEDENCE。通过自定义 MethodInterceptor 并设置原创 2025-05-17 09:46:27 · 474 阅读 · 0 评论 -
Spring AOP 拦截器链
Spring AOP 通过动态生成的代理类(使用 JDK 动态代理或 CGLIB)来拦截目标方法的调用,并根据配置的 Advisor 插入增强逻辑(Advice)。代理类的核心流程包括:匹配 Advisor 的 Pointcut,构建拦截器链,并依次执行 Advice(如 Around、Before、After 等),最终返回结果。代理类通过 MethodInvocation 对象管理拦截器链的执行,proceed() 方法递归调用每个 MethodInterceptor 的 invoke() 方法,形成类原创 2025-05-16 17:54:34 · 795 阅读 · 0 评论 -
Spring AOP 中的Advisor 和 Advice
在 Spring AOP 中,Advisor 和 Advice 是两个核心概念,分别承担不同的职责。Advice 定义了在目标方法执行前后要插入的行为,如事务管理或日志记录,而 Advisor 则将 Advice 和 Pointcut 组合在一起,明确在哪些地方执行什么操作。Advisor 可以直接注册为 Bean 被 Spring 自动识别,而 Advice 必须绑定到切点上使用。Spring 内部通过 Advisor 来构建 AOP 代理,并织入对应的 Advice。简而言之,Advice 是“做了什么原创 2025-05-16 16:51:14 · 446 阅读 · 0 评论 -
@Transactional 实现原理
Spring 框架通过 AOP 机制实现了声明式事务管理,核心是通过 @Transactional 注解控制事务的开启、提交和回滚。Spring 事务模块的核心组件包括 TransactionInterceptor、PlatformTransactionManager 和 TransactionAttributeSource 等。启用事务管理需使用 @EnableTransactionManagement 注解,Spring 会注册事务拦截器和事务属性源,并通过 AOP 代理机制生成代理对象。代理对象在方法原创 2025-05-16 16:26:03 · 790 阅读 · 0 评论 -
Spring 如何跨线程传递事务上下文
在 Spring 框架中,事务上下文的跨线程传递是一个常见挑战,因为 Spring 默认使用 ThreadLocal 管理事务上下文,导致事务信息无法直接在线程间共享。为实现跨线程传递,可以通过以下方式:1)手动复制事务上下文,适用于简单场景但易出错;2)使用自定义 TaskExecutor 和 Runnable 封装事务上下文,自动绑定和解绑;3)使用第三方库如阿里巴巴的 TransmittableThreadLocal,简化跨线程事务管理。这些方法各有优缺点,开发者可根据具体需求选择合适方案。原创 2025-05-16 15:06:11 · 733 阅读 · 0 评论 -
@Configuration 和 @Component 的区别
在 Spring 框架中,@Component 和 @Configuration 都用于将类注册为 Spring 容器中的 Bean,但它们的用途和机制有所不同。@Component 用于标记普通组件类(如 Service、DAO),Spring 会自动扫描并注册为 Bean,适用于业务组件。@Configuration 则用于标记配置类,内部通过 @Bean 方法定义 Bean,适用于复杂初始化逻辑或第三方库的整合。@Configuration 类会被 Spring 代理,确保 @Bean 方法返回单例实原创 2025-05-16 10:05:50 · 538 阅读 · 0 评论 -
Spring 的 设计模式
Spring 框架中广泛应用了多种设计模式,以实现代码的松耦合、可扩展和可维护性。单例模式通过共享 Bean 实例提升性能;工厂模式解耦 Bean 的创建与使用;代理模式在 AOP 中动态增强功能;模板方法模式封装固定流程,减少冗余代码;适配器模式兼容不同接口风格;观察者模式实现组件间的松耦合通信;策略模式支持运行时动态切换算法;装饰器模式动态增强功能,避免继承爆炸。这些设计模式共同支撑了 Spring 框架的高效与灵活性。原创 2025-05-14 16:10:14 · 940 阅读 · 0 评论 -
Spring的声明式事务和编程式事务
Spring 框架中的事务管理主要分为声明式事务和编程式事务两种方式。声明式事务基于 AOP,通过注解或配置实现事务管理,具有解耦、易维护的优点,但灵活性较低,适合常规业务逻辑。编程式事务通过手动编写事务控制代码,灵活性高,适合复杂事务逻辑,但代码侵入性强,可维护性较差。声明式事务适用于 CRUD 操作和多层调用链,而编程式事务则适合需要动态控制事务边界的场景。开发者可根据具体业务需求选择合适的事务管理方式。原创 2025-05-14 15:14:50 · 700 阅读 · 0 评论 -
Spring Cloud 简介
Spring Cloud 是一个基于 Spring Boot 的分布式系统开发框架,提供了一整套微服务架构下的解决方案。它集成了多种核心组件,如 Eureka(服务注册与发现)、Feign(声明式 REST 调用)、Hystrix(断路器)、Zuul(API 网关)等,支持配置管理、服务治理、分布式事务处理等功能。Spring Cloud Alibaba 进一步扩展了其能力,提供了 Nacos、Sentinel、Seata 等组件,支持阿里生态。Spring Cloud 的优势在于快速上手、组件丰富、可插拔原创 2025-05-12 15:33:50 · 500 阅读 · 0 评论 -
Spring MVC 中 HandlerAdapter 的作用
HandlerAdapter 是 Spring MVC 中的核心组件,负责将不同类型的控制器(Handler)封装成统一的接口进行调用,并处理其返回值和异常。它充当“翻译官”的角色,使得基于注解的控制器、传统控制器等不同形式的控制器能够被统一处理。HandlerAdapter 的核心接口包括 supports()、handle() 和 getLastModified(),分别用于判断是否支持特定处理器、执行处理器方法以及获取资源最后修改时间。Spring MVC 通过 HandlerAdapter 实现了对原创 2025-05-09 10:25:06 · 522 阅读 · 0 评论 -
Spring MVC 参数绑定 、拦截器(Interceptor) 和 文件上传
Spring MVC 提供了多种机制来处理请求参数、拦截请求以及文件上传。参数绑定通过 HandlerMethodArgumentResolver 实现,支持 @RequestParam、@PathVariable 等注解,将请求参数自动映射到 Controller 方法的参数中。拦截器(Interceptor)则用于在请求处理前后执行统一操作,如权限验证或日志记录,通过实现 HandlerInterceptor 接口并配置拦截器链来实现。文件上传通过 MultipartResolver 接口处理 mult原创 2025-05-09 10:09:19 · 1023 阅读 · 0 评论 -
spring mvc 实现原理
Spring MVC 是 Spring 框架中用于构建基于 MVC 架构的 Web 应用的核心模块。其核心组件包括 DispatcherServlet(前端控制器)、HandlerMapping(处理器映射)、HandlerAdapter(处理器适配器)和 ViewResolver(视图解析器)等。请求处理流程从客户端请求开始,经过 DispatcherServlet 的分发,由 HandlerMapping 找到对应的 Controller 方法,再通过 HandlerAdapter 调用方法并处理参数和原创 2025-05-09 09:53:27 · 673 阅读 · 0 评论 -
Spring AI 接入本地大模型
本文介绍了如何在 Spring Boot 项目中通过 Spring AI 接入本地部署的 Ollama + Qwen3-72B 模型。首先,确保 Ollama 和 Qwen3-72B 已正确安装并运行,且具备 JDK 17+ 和 Spring Boot 3.x 环境。接着,在 pom.xml 中添加 Spring AI 和 Ollama 的依赖,并在 application.properties 中配置 Ollama 服务地址。然后,编写 Qwen3Service 调用模型,并通过 Qwen3Control原创 2025-05-09 09:32:59 · 653 阅读 · 0 评论 -
spring boot 整合 mybatis 实现原理
类名作用自动配置类,整合 MyBatis创建 MyBatis 的注册 Mapper 接口扫描器实际执行 Mapper 接口扫描将 Mapper 接口封装为 Spring Bean线程安全的SqlSession,用于执行 SQL。原创 2025-05-08 11:16:02 · 398 阅读 · 0 评论 -
Spring Boot 3.x 如何自定义 Starter
│ └── src/└── src/└── main/└── java/:包含自动配置逻辑:提供对外 API 接口或工具类</</</</特性Spring Boot 3.x Starter 实现自动配置机制使用替代包名迁移从javax迁移到jakarta条件装配使用配置属性使用和AOT 支持使用和模块化支持使用支持 JPMSGraalVM 支持支持 Native Image 编译依赖管理使用 Spring Boot 3.x 的依赖版本(如 Spring Framework 6.x)性能优化。原创 2025-05-08 09:37:08 · 1146 阅读 · 0 评论 -
Spring Boot 3.x 特性
Bean特性Spring Boot 3.x 改进JDK 支持最低 Java 17,支持 JPMS自动配置改用文件包名迁移从javax迁移到jakartaAOT 编译支持 Ahead-of-Time 编译,提升启动性能GraalVM 原生镜像支持生成原生可执行文件,启动时间 < 100msHTTP 客户端默认使用 Java 11+ 的HttpClient支持更简洁的安全配置Micrometer 指标内置 Micrometer 2.0,支持更多监控场景模块化支持。原创 2025-05-08 09:34:19 · 1083 阅读 · 0 评论 -
@Conditional 的实现原理
Class<?value()方法返回一组Condition实现类,Spring 会依次判断这些条件是否满足。matches()方法返回true表示条件满足,继续注册 Bean。提供了对等的访问。Condition@Bean@Bean特性说明核心机制Spring 使用Condition接口和判断条件是否满足评估时机在解析配置类时触发评估顺序多个按顺序评估,只要一个条件满足就跳过注册支持类型类、方法、注解Spring Boot 自动装配广泛应用于自动配置类,如自定义扩展可实现自定义。原创 2025-05-08 09:30:45 · 902 阅读 · 0 评论 -
Spring Boot 自动配置实现原理
Bean特性自动配置文件自动配置类加载方式直接读取JDK 支持JDK 8 ~ 17JDK 17+模块化支持不支持 JPMS支持 JPMS反射 API 改进使用使用性能优化无显著优化避免多次加载条件注解机制保持一致保持一致。原创 2025-05-08 09:26:58 · 1368 阅读 · 0 评论 -
Spring Boot 中 Tomcat 的启动流程
特性说明默认容器Spring Boot 默认使用嵌入式 Tomcat(启动入口→refresh()→→核心组件ConnectorServlet 初始化→→init()HTTP 监听→→ NIO 线程池启动性能优化使用 NIO、延迟加载、GZIP 压缩、APR/native 模式源码路径。原创 2025-05-08 09:24:32 · 1099 阅读 · 0 评论 -
Spring Boot 启动流程
特性说明启动入口核心类启动流程创建上下文 → 准备环境 → 加载 Bean → 刷新上下文 → 实例化单例 Bean自动装配通过和实现Bean 生命周期实例化 → 属性注入 → 初始化 → 销毁异常处理容器捕获异常并抛出事件机制支持多种事件(如。原创 2025-05-08 09:21:46 · 289 阅读 · 0 评论 -
@Import 实现原理
特性@Import实现原理支持类型普通配置类、处理类处理流程方法处理导入类动态决定要导入的类动态注册 Bean 定义注册时机阶段注意事项避免循环导入,控制导入顺序。原创 2025-05-08 09:19:27 · 504 阅读 · 0 评论 -
@Configuration 的实现原理
特性@Component用途定义配置类,显式注册 Bean标记为 Spring 管理的组件Bean 来源@Bean方法类注解是否支持 CGLIB 代理✅ 是❌ 否是否支持内部调用✅ 是(通过代理)❌ 否是否支持@Import✅ 是❌ 否是否支持@Bean✅ 是❌ 否是否需要✅ 是✅ 是是否显式控制 Bean 创建✅ 是❌ 否。原创 2025-05-08 09:17:47 · 963 阅读 · 0 评论 -
手写一个简化版的Spring Ioc容器(二)
功能实现方式添加前置和后置处理方法,在 Bean 初始化阶段调用@Scope通过注解标记作用域,在getBean()时根据作用域决定是否新建实例在scan()方法中扫描包路径,注册 Bean在getBean()时判断优先级和名称匹配解析配置类,递归处理@Import导入的类@Bean在配置类中注册 Bean单例与原型缓存管理单例 Bean销毁逻辑destroy()原创 2025-05-08 09:10:47 · 745 阅读 · 0 评论 -
手写一个简化版的Spring Ioc容器(一)
特性实现说明组件扫描通过实现类路径扫描Bean 管理使用注册和管理 Bean依赖注入通过反射注入带有@Autowired的字段生命周期管理支持注解驱动使用@Component@Autowired@Qualifier单例模式默认单例,通过缓存管理销毁钩子通过实现关闭逻辑。原创 2025-05-08 09:09:37 · 712 阅读 · 0 评论 -
Spring 如何解决循环依赖问题?
当两个或多个 Bean 相互依赖,形成一个闭环,称为循环依赖(Circular Dependency)。特性Spring 三级缓存机制解决类型单例 Bean、Setter/字段注入的循环依赖不支持类型构造器注入、多例 Bean核心机制提前暴露 Bean 的早期引用(半成品 Bean)三级缓存结构(一级)、(二级)、(三级)缓存协作流程三级 → 二级 → 一级AOP 代理处理通过动态生成代理对象核心类。原创 2025-05-07 14:36:57 · 792 阅读 · 0 评论 -
Spring Bean 的创建流程
阶段方法说明实例化构造函数、工厂方法创建 Bean 实例属性注入@Autowired@Resource@Value注入依赖对象初始化前可修改 Bean 实例初始化初始化逻辑初始化后可生成代理对象(如 AOP)销毁容器关闭时执行特性说明Bean 创建入口→实例化阶段调用构造函数或工厂方法属性注入阶段依赖注入(@Autowired@Resource初始化阶段代理生成实现(如 AOP)销毁阶段单例 Bean 的销毁方法(异常处理容器捕获异常并抛出。原创 2025-05-07 14:20:54 · 1068 阅读 · 0 评论