spring 源码

news/2024/11/2 7:35:54/

bean的创建

获取类class

推断构造方法 @Autoware

创建一个普通对象

依赖注入    populateBean  把一些属性注入

初始化之前 @PostConstruct 注解 初始注入 实际可以用构造方法啊

初始化   initializationBean

1.判断是否有aware接口   invokeAwareMethods

2.执行 applyBeanPostProcessorsBeforeInitialization

3. 初始化方法 invokeInitMethods

4. applyBeanPostProcessorsAfterInitialization

getBeanPostProcessors()  数组不为空  里面有AbstractAutoProxyCreator  继承了procecss

初始化后 AOP

cglib生产代理对象

Spring 5.x中AOP默认依旧使用JDK动态代理
SpringBoot 2.x开始,AOP为了解决使用JDK动态代理可能导致的类型转换异常,而使用CGLIB。
在SpringBoot 2.x中,AOP如果需要替换使用JDK动态代理可以通过配置项spring.aop.proxy-target-class=false来进行修改,proxyTargetClass配置已无效。
 

放入concurrentHashMap

产生bean对象

1.bean 创建

2.spring 推断构造方法

在spring创建中,当出现多个构造方法时,如果没有默认构造方法,会出现报错

可以采用Autowawired实现指定对应的构造方法

或者

如果采用xml配置 也可以指定对应的构造方法

3.bean的获取 

在缓存池中,存在一个currentHashMap  保存着bean

4.循环依赖

什么是循环依赖? bean A依赖B  B依赖A  

怎么解决?  spring 三级缓存

什么是三级缓存 

在Bean A创建 一般有这几个

创建A的实例

简单来说  

就是 A 创建   填充B

B没有 去一级缓存找 。没有去二级缓存找  ,如果还没有  会调用三级缓存的操作  

来创建一个代理对象或者普通对象, 填充

异步导致循环依赖错误 

@Async  会产生代理对象

使用切面也会产生代理对象

spring mvc

如何理解boot中的start

就是一个减少配置的jar包   定义了一些初始化的bean来简化结构

配置都是在meta-inf/spring.factories  写入的配置 


http://www.ppmy.cn/news/81843.html

相关文章

【openGauss】如何将数据库中的自定义复合类型绑定到java的class中

前言 某客户,将应用的数据库从oracle迁移到openGauss系,源库中使用了大量的自定义type,所以java代码里也有很多对type对象的处理。在oracle中可以直接传对象给数据库,但是openGauss/postgresql的源码用例中,都是通过P…

LeetCode 198 打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个…

luatOS网站 lua语言学习 练习题

lua 教程跳转链接&#xff0c;练习题都来自这里 逻辑运算 检验大小&#xff08;自测题&#xff09; 题目&#xff1a;如果已知number变量n&#xff0c;那么如果需要判断n是否符合下面的条件&#xff1a; 3<n≤10 以下四行判断代码&#xff0c;正确的是&#xff1f; &a…

Python+Yolov5果树上的水果(苹果)检测识别

程序示例精选 PythonYolov5果树上的水果(苹果)检测识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonYolov5果树上的水果(苹果)检测识别>>编写代码&#xff0c;代码整洁…

oracle如何写一个带参数的视图

--创建参数包 create or replace package view_risk is function set_depcode(depcode varchar2) return varchar2; function get_depcode return varchar2; function set_dmonth(dmonth varchar2) return varchar2; function get_dmonth return varchar2; end view_r…

SVD求解两组多维点之间的欧式变换矩阵,及halcon代码实现

之前研究了二维点的仿射变换&#xff0c;用解矩阵的方式求解了两组二维点之间的变换矩阵。 学习了下SVD&#xff0c;看到可以用SVD求解两组多维点之间的欧式变换矩阵&#xff0c;当然也是个最优化问题。 这里的变换只有平移和旋转&#xff0c;没有缩放。 一、先说结论&#…

python异常处理名称整理

Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。BaseException所有异常的基类UnboundLocalError访问未初始化的本地变量SystemExit

RK3568平台开发系列讲解(驱动基础篇)RK平台IR的使用

🚀返回专栏总目录 文章目录 一、红外遥控配置二、内核驱动2.1 DTS 定义键值表2.2 内核用户码和IR键值的获取2.3 编译 IR 驱动进内核2.4 Android 键值映射三、IR 波形沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将对RK IR的使用进行学习。 一、红外遥控配置 …