
Spring源码分析
文章平均质量分 94
Spring分析源代码
Kudo新一
这个作者很懒,什么都没留下…
展开
-
动态代理大总结
类型的bean 支持Order注解排序 放入list】然后还会找到@Aspect切面【遍历所有bean 看哪个类上有@Aspect注解 】里的。原创 2024-03-27 17:48:35 · 829 阅读 · 0 评论 -
Spring循环依赖
spring创建bean的时候是串行去创建的,而不是并发的循环依赖出现的场景解决方法:三级缓存,也就是3个Map增加中间人(缓存)打破循环A对象有个B对象的成员变量,B对象有个A对象的成员变量,此时A对象要进行属性填充,但B对象还没有创建好,此时就需要去创建B对象,但是此时A对象也没创建好,于是陷入循环。。。这时候,就有个办法,A对象生成后马上把自己放入到一个map中,这样B对象就能从这个map里取到A对象执行后续操作,且操作的是同一个对象。原创 2024-03-19 17:58:23 · 734 阅读 · 0 评论 -
Spring Bean 依赖注入(下)
都只会找到一个要注入的bean,然后构造一个shortcutDependencyDescriptor对象(依赖描述器的子类)作为缓存。缓存的是字段的信息,字段的类型和bean的名字。如果第二次来注入,直接把缓存好的对象传到方法里直接拿缓存好的beanName去得到bean对象@Value下面还有一步,根据类型把所有的beanName找出来。原创 2024-03-20 17:50:00 · 1003 阅读 · 0 评论 -
SpringBoot自动配置
SpringBoot中众多的条件注解,都是基于Spring中的@Conditional来实现的,所以我们先来用一下@Conditional注解。先来看下@Conditional注解的定义:/***/Class<?@OverrideConditionContext:表示条件上下文,可以通过ConditionContext获取到当前的类加载器、BeanFactory、Environment环境变量对象。原创 2024-03-19 15:50:45 · 760 阅读 · 0 评论 -
Spring Bean生命周期源码解析(上)
构造方法里会new一个扫描器(扫描某个包路径,对扫描到的类进行解析,比如,扫描到的类上如果存在@Component注解,那么就会把这个类解析为一个BeanDefinition)和BeanDefinition读取器(可以直接把某个类转换为BeanDefinition,并且会解析该类上的注解)Spring5.3新增的接口就两个实现类什么都没做Jdk9或11以后得新特性JFR 就是 Java 的黑匣子主要用于记录这行代码的运行时间是多少第三行记录结束refresh()方法里有个完成Bean工厂初始化的方法这个方法原创 2024-03-19 15:53:22 · 647 阅读 · 0 评论 -
SpringBoot启动过程
检查Springboot是否配置了懒加载,如果配置了就会往spring容器添加一个懒加载beanPostProcessor修改spring bean定义的懒加载全部设置为true。2.有可能不是web应用,也能是Springboot java应用【recative是响应式的 Servlet是阻塞式的 古老的web类型 都能接受web请求的】Springboot默认的ApplicationStartingEvent的starting方法会发布广播一个ApplicationStartingEvent事件。原创 2024-03-13 16:40:30 · 1105 阅读 · 0 评论 -
Spring底层架构核心概念
他就是BeanDefinition的一个读取器 ,传给他一个类,他就能解析类上面的注解,然后变成一个BeanDefinition,然后放到spring的容器中,然后就成为了一个bean。可以解析xml文件的,解析<bean/>标签这里就不会报错,能拿到bean,底层解析xmlRootBeanDefinition和合并BeanDefinition相关和childBeanDefinition(spring2.5之后不怎么用了)原创 2024-03-11 01:58:23 · 1126 阅读 · 0 评论 -
模拟手写实现Spring
AppConfig上肯定需要注解用于定义扫描路径@Target(ElementType.TYPE)——接口、类、枚举、注解@Target(ElementType.FIELD)——字段、枚举的常量@Target(ElementType.METHOD)——方法@Target(ElementType.PARAMETER)——方法参数@Target(ElementType.CONSTRUCTOR) ——构造函数@Target(ElementType.LOCAL_VARIABLE)——局部变量。原创 2024-03-11 01:51:34 · 774 阅读 · 0 评论 -
Spring概述
spring的生态比如springboot、springcloud都是基于spring Framework来做的springboot在使用的过程中会调用这么一行代码。如果是用spring,则用的是下面那行代码。spring 3.0以后可以使用类的方式来充当配置文件。也可以使用注解来定义扫描的路径,当前是spring6了。从spring容器中就可以通过context.getBean()来获取到对象。原创 2024-03-11 01:50:27 · 1063 阅读 · 0 评论