• 2024-07-049.Bean的生命周期
    packagecom.xkj.org;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;impo
  • 2024-06-19【重写SpringFramework】第一章beans模块:Bean的销毁(chapter 1-9)
    1.前言Bean的生命周期包括初始化和销毁操作,上节介绍了Bean初始化流程,本节来看Bean的销毁流程是如何实现的。在实际应用中,绝大多数对象并不需要执行销毁操作,但某些对象本身管理着一定的资源。当Spring容器关闭时,所有的对象都会被虚拟机回收。在此之前,这些特殊的对象
  • 2024-06-19Spring容器系列-FactoryBean使用/原理
    Spring-FactoryBean使用/原理  概要  在某些情况下,实例化Bean过程比较复杂,若按照传统的方式,则需要在中提供大量的配置信息,不够灵活,这时采用编码的方式能得到一个简单的方案。  Spring为此提供了一个org.springframework.bean.factory.FactoryBean的工厂类接口,用户
  • 2024-06-172024-06-17-Spring 源码阅读(三)Bean 的生命周期
    由于Spring源码非常多,博客中贴源码会占用大量篇幅,阅读困难。详细分析部分会以commit提交形式关联源码提交,画图例来说明源码整体逻辑。Bean生命周期主体逻辑相关代码:Bean的基本创建流程、lazyInit、循环依赖Bean对象创建基本流程通过最开始的关键时机点分析,我们知道Bean
  • 2024-06-17Spring容器系列-bean的生命周期
    Spring容器系列-bean的生命周期  bean的生命周期从调用beanFactory的getBean开始,到这个bean被销毁,可以总结为以下七个阶段:  1. 处理名称,检查缓存  2.处理父子容器  3.处理dependsOn  4.选择scope策略  5.创建bean  6.类型转
  • 2024-06-17AOP代理的创建【底层源码】
    代理的创建(源码)创建代理的方法是postProcessAfterInitialization:如果Bean被子类标识为代理,则使用配置的拦截器创建一个代理源码参考:AOP切面底层原理【底层源码】-postProcessAfterInitialization源码部分wrapIfNecessary方法主要用于判断是否需要创建代理,如果bean能
  • 2024-05-30Spring Bean实例化:从源码窥探生命之源
    1.引言在Spring框架中,Bean的生命周期是一个至关重要的概念,它涉及了Bean的创建、初始化、使用以及销毁等多个阶段。其中,Bean的实例化作为生命周期的起点,具有举足轻重的地位。以下将对Spring中Bean的实例化过程进行深度解析,结合源码分析,提供更深入的理解。2.Bean实例化的
  • 2024-05-26Spring解决循环依赖的详细解析及代码分析
    Spring框架在处理Bean的循环依赖时,主要针对单例作用域(Singleton)的Bean,并且是在通过setter方法(即基于property的依赖注入)进行依赖注入时能够解决循环依赖问题。对于构造器注入的循环依赖,Spring是无法解决的,会抛出BeanCurrentlyInCreationException异常。下面是对Spring解决
  • 2024-05-17Spring IOC原理
    1、IOC的理解IOC也叫控制反转,是将对象的创建和管理交给spring来做。了解springIOC,先了解几个相关类:(1)IOC容器-BeanFactoryBeanFactory是IOC容器的顶层接口,定义一些基础功能,ApplicationContext是IOC容器的高级接口,功能更多,如资源的访问(XML文件、Java配置类)等;他们都是负责生产
  • 2024-05-06Spring bean 相关
    beanId:bean的唯一标识beanName:applicationContext.getBean("userService")参数传递的其实是beanName。如果设置<bean>时没有设置beanName,会将beanId转化为beanName,没有beanId会将全类名设置为beanName,即com.xx.xx.UserServiceImplbean也可以设置多个别名bean设置作用范
  • 2024-05-06Spring学习之——Bean加载流程
    Spring IOC容器就像是一个生产产品的流水线上的机器,Spring创建出来的Bean就好像是流水线的终点生产出来的一个个精美绝伦的产品。既然是机器,总要先启动,Spring也不例外。因此Bean的加载流程总体上来说可以分为两个阶段:容器启动阶段Bean创建阶段一、容器启动阶段:容器的启动阶
  • 2024-05-0126-Spring源码分析(一)
    1.Spring架构设计Spring框架是一个分层架构,他包含一系列的功能要素,并被分为大约20个模块。1.1设计理念Spring是面向Bean的编程(BOP:BeanOrientedProgramming),Bean在Spring中才是真正的主角。Bean在Spring中作用就像Object对OOP的意义一样,没有对象的概念就像
  • 2024-04-27(一)spring beans
    1.beanDefinition首先是承载class的载体,里面包含了许多如是否单例,属性值等内容。以下只是建议代码,重在理解概念packageorg.springframework.spring.beans.factory.config;/***@ClassName:BeanDefinition//类名*@Description://描述*@Author:10300//作者
  • 2024-04-14populateBean方法解析
    populateBean方法实现的功能autowired解析Autowired实例,code如下:packagecom.gientech.populateBean.annotation;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;@ControllerpublicclassBook
  • 2024-04-09Spring深度学习:循环依赖及源码解析
    文章目录Spring深度学习:循环依赖及源码解析一、序言二、问题原因三、解决方案1.普通Bean对象循环依赖解决2.AOP代理场景下循环依赖解决3.AOP代理场景下多依赖解决四、源码分析:流程①:实例化对象A后,将对象A的工厂对象放入三级缓存流程②:对象A依赖对象B,在缓存中查找对象B流
  • 2024-04-02Spring默认BeanName
    先说结论:1、XML配置和注解生成默认BeanName的机制是不同的2、XML配置默认BeanName=全类名+#+数字,如com.anyway.p2024.service.impl.BigHouseServiceImpl#03、注解默认BeanName=短类名首字母变成小写,如bigHouseServiceImpl注意:如果短类名前2个字母都是大写,则保持短类
  • 2024-03-30Spring 一文彻底搞定循环依赖
    Spring解读循环依赖一.前言Spring是怎么解决循环依赖问题第一级缓存存放的是完全初始化完成的可以直接使用的对象,第二级缓存存放的是经过后置处理器处理(即代理过)的对象,第三级缓存村放的是刚实例化好没有经过后置处理器处理(即没有被代理过)的对象。二.什么是循环依赖
  • 2024-03-22@Autowired,@Resource,@Value,@Lazy注入的核心逻辑原理
    classDefaultListableBeanFactoryextendsAbstractAutowireCapableBeanFactory{@Override@NullablepublicObjectresolveDependency(DependencyDescriptordescriptor,StringrequestingBeanName,Set<String>autowiredBeanNames,TypeConverter
  • 2024-03-22Spring中getBean的生命周期和整个链路原理
    publicabstractclassAbstractBeanFactoryextendsFactoryBeanRegistrySupportimplementsConfigurableBeanFactory{publicObjectgetBean(Stringname)throwsBeansException{returndoGetBean(name,null,null,false);}protected<T&
  • 2024-03-21实现Small-Spring
    《Spring手撸专栏》第3章目录结构类关系类分析:BeanFactory接口:定义一个得到bean的接口packagemain.java.com.pickle.springframework.factory;importmain.java.com.pickle.springframework.factory.config.BeanDefinition;importjava.util.Map;importjava.ut
  • 2024-03-19Spring JdbcTemplate+Druid数据源+FreeMarker 开发代码生成器
    虽然在这个时代,几乎所有成熟的开发框架都自带代码生成器,但有时候我们难免会遇到没有代码生成器的开发框架,这个时候,自己手中有一套代码生成器,把模版文件调整一下立马就能用,这就比较惬意了。这里讲一下如何利用SpringJdbcTemplate+Druid数据源+FreeMarker开发一套代码生成器。
  • 2024-03-18InstantiationAwareBeanPostProcessor 接口实现
    BeanPostProcessor结构图1code如下:packagecom.gientech.resolveBeforeInstantiation;publicclassBeforeInstantiation{publicvoiddoSomething(){System.out.println("dosomething......");}}packagecom.gientech.resolveBefor
  • 2024-03-16Spring Schedule定时任务进阶篇(调度器)
    SpringSchedule背后支持多种任务调度方案,如JDKTimer、concurrent包下的ScheduledExecutorService以及Quartz等。Spring通过封装这些底层实现,为开发者提供了统一的接口和配置方式来处理定时任务。接下来通过SpringBoot+数据库来实现根据数据库数据来动态管理我们的定时任务,我这
  • 2024-03-02【Mybatis】【三】源码分析- MapperFactoryBean 的创建过程以及 Mapper 接口代理的生成过程详解
    1 前言本节我们续前两节(调试查看Mapper接口生成过程、源码分析Mapper生成注入入口分析)的内容,看下MapperFactoryBean是如何代理掉我们的@Mapper接口的。上节我们看到我们的Mapper接口的BeanDefinition,已经放进spring的上下文中了,也就是在BeanFactory的BeanDefin
  • 2024-02-28解析Spring中的循环依赖问题:再探三级缓存(AOP)
    前言在之前的内容中,我们简要探讨了循环依赖,并指出仅通过引入二级缓存即可解决此问题。然而,你可能会好奇为何在Spring框架中还需要引入三级缓存singletonFactories。在前述总结中,我已经提供了答案,即AOP代理对象。接下来,我们将深入探讨这一话题。AOP在Spring框架中,AOP的实现是通