spring的理解 :

spring核心容器中分为几个模块 : 

  1. Spring Core : 它是框架最基础的部分,提供了IOC控制反转,对Bean进行管理
  2. Spring Context : 他继承了BeanFactory,提供上下文信息,扩展出JNDI,EJB,电子邮件,国际化等功能
  3. Spring Dao : 提供了JDBC的抽象层,以及声明事物的管理方法
  4. Spring ORM : 主要是提供一些JPA,MyBatis等映射层
  5. Spring AOP : 面向切面编程,能够在除业务逻辑之外提供一些事物,日志,安全的处理
  6. Spring Web MVC : 提供了web应用的模型-视图-控制器的全功能实现

spring是一个开源的轻量级的容器架构,能够帮我们承载具体的bean对象,它里面提供了IOC的控制反转以及AOP的面向切面编程,首先 :

        IOC : 在我们没有引入IOC的时候,一个对象A依赖对象B,那么对象A实例化的时候必须去创建对象B,也就是对象的创建,销毁其控制权都是在自己的手上,那么引入IOC之后,就从一种主动变成了被动的形式

        那么在IOC控制反转之后获取对象的过程叫做依赖注入,那么依赖注入的方式有: set注入,构造器注入,注解注入

        AOP : 他是指在一个系统里面包含了很多的组件,每一个组件都会去实现一个功能,但是出去我们自身的业务逻辑之外还会有事物,日志,安全的处理,那么AOP能够在这些业务逻辑中去做其他的事情,也就是在代码执行前执行后可以去做一下日志,安全,事物的处理, 它里面提供了两个动态代理

                1. JDK动态代理 : 目标对象必须去实现业务接口

                2. CGLIB动态代理 : 对目标对象生成的子类并覆盖其中的方法,采用继承的方式去实现,所以他不能处理一些 final修饰的类进行代理


在spring中的执行流程大致 : 

        1. (通过xml配置文件得到BeanDefinition) :在spring中的大部分功能都是以配置文件作为切入点,通过XmlBeanDefinitionReader 对文件进行读取,解析以及注册,最终得到BeanDefinition的Bean的定义信息(从解析xml文件到BeanDefinition还有许多复杂的过程)

                XML文件的解析流程 :

                2.1 通过去继承AbstractBeanDefinitionReader中的方法,使用RourceLoader将资源文件路径转换为对应的Resource文件

                2.2 通过DocumentLoader对Resource文件进行转换,将Resource文件转换为Document文件

                2.3 通过实现接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader类对Document进行解析,并使用BeanDefinitionParserDelegate对Element进行解析

Bean的生命周期主要分为五步 : 

        1. (通过反射API创建Bean实例) : 实例化 :  通过反射实例化对象,实例化一个Bean对象;Bean实例化时机分为两个 :

                        1.1 BeanFactory管理的Bean是在使用Bean时才会去实例化

                        1.2 ApplicationContext管理的Bean是在容器初始化时就会完成Bean的实例化

                实例化过程 :

                        创建一个applicationContext容器,getBean时是通过Bean的名称和注解去容器中获取bean的,如果找到了那么就直接返回,没有找到那就进行创建

                        

        2. 属性赋值 : 设置相关的属性和依赖
               

        3. 初始化 :  配置文件中的Bean定义包含init-method属性,该属性的值将解析为Person类中的方法名称,初始化的时候会调用这个方法

                3.1 初始化前 : 检查Aware的相关接口并设置相关依赖 ; BeanPostProcessor前置处理

                        3.1.1 实现了BeanNameAware接口,通过传递Bean的名称来调用setBeanName()方法

                        3.1.2 实现了BeanFactoryAware接口,通过传递BeanFactory对象的实例来调用setBeanFactory()方法

                        3.1.3 实现了BeanPostProcessor接口,在初始化之前调用用postProcessBeforeInitialization()方法

                        3.1.4 实现了InitializingBean接口,在设置了配置文件中定义的所有Bean属性后,调用afterPropertiesSet()方法

                3.2 初始化 : 是否实现了InitailizinBean接口 ; 是否配置自定义的init- method

                3.3 初始化后 : BeanPostProcessor 后置处理

                Bean Factory对象如果附加了Bean 增强处理器,就会调用postProcessAfterInitialization()方法

                初始化完成

        4.销毁 : Bean的使用前注册销毁相关的回调接口(Destruction) --- 使用中 --- 实现DestructionBean接口(当Application不再需要Bean引用时,将调用destroy()方法) --- 如果配置文件自定义的destory-method属性就会调用相应的方法销毁

     

Spring怎么解决依赖循环问题 : spring的依赖循环包括构造器和setter循环依赖

  1. 构造器依赖循环 : 关于这个问题是无法进行解决的,只能抛出BeanCurrentlyInCreationException

Spring的执行流程可以概括为以下步骤:

        1. 加载配置文件:Spring通过配置文件或注解等方式加载应用程序的配置信息。

        2. 初始化IoC容器:Spring会根据配置文件或注解等方式创建IoC容器,并将容器管理的Bean实例化、配置和组装。

        3. Bean的生命周期:Spring容器管理的Bean的生命周期包括实例化、属性注入、初始化和销毁等过程。

        4. 处理请求:Spring通过控制器等组件接收请求,并根据请求调用相应的服务处理业务逻辑。

        5. 返回响应:Spring将处理结果返回给客户端,并进行视图渲染等操作。

Bean的声明周期包括以下阶段:

        1. 实例化:当Spring容器启动时,根据配置文件或注解等方式创建Bean的实例。

        2. 设置属性:Spring容器将配置文件或注解中的属性值注入到Bean实例中。

        3. 初始化:当Bean实例创建完成并注入属性后,Spring容器会调用Bean的初始化方法进行一些额外的初始化处理。

        4. 使用:Bean实例被放入IoC容器中进行管理,可以在整个应用程序中被调用和使用。

        5. 销毁:当Spring容器关闭时,会调用Bean的销毁方法进行一些收尾工作,如释放资源等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值