![](https://img-blog.csdnimg.cn/4cf01af6ea204addaff62c9ef28488ff.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Spring源码分析
文章平均质量分 96
深入了解 Spring 框架的实现原理可以让你更好地理解框架的设计思想和使用方式。这可以帮助你更好地使用 Spring 框架,并且能够更快地解决问题。其次,阅读源代码可以让你学习到很多优秀的编程技巧和设计模式。
长安不及十里
活到老,学到老,作为程序猿的基本修养,哈哈哈哈哈!
展开
-
Spring源码分析(十)Bean实例化(下)
如果bean定义不是合成的,并且工厂中存在创建时应用于单例 bean 的 InstantiationAwareBeanPostProcessor后置处理器,则需要处理执行它的postProcessAfterInstantiation()方法。我们后面来详细分析,到这我们就完成了Bean的整个流程,后面我们正对各个模块来进行分析,前面的分析这是一个整体流程的概述,相当于下面的代码部分,这只是正对下面的一个流程的分析。a、对Bean 的属性代调用getBean()方法,完成依赖Bean 的初始化和依赖注入。原创 2023-09-01 17:07:59 · 4504 阅读 · 1 评论 -
Spring源码分析(九)Bean实例化(中)
示例中并未显式调用被@PostContruct注解的init()方法和被@PreDestroy注解修饰的destroy()方法,那么问题来了:这些被添加进回调方法列表中的方法是在哪里调用呢执行的?,让我们回到我们刚开始的源码部分,开始实例化Bean。逻辑比较清晰,遍历注入元信息中的所有成员,也就是之前处理过的属性和方法信息,对于没有注册为 BeanDefinition 的外部管理配置成员的元素进行注册,并添加到元信息的checkedElements集合中。这一步主要是为了防止重复处理通过注解注入的元素。原创 2023-09-01 14:11:49 · 4349 阅读 · 0 评论 -
Spring源码分析(八)Bean的实例化(上)
上一节我们看到正对不同作用域Bean的加载,但是Bean的核心创建我们还没有说,下面我们来看看Bean的核心加载也就是CreateBean与DoCreateBean方法的核心实现AbstractAutowireCapableBeanFactory根据设置的class属性或者根据className来解析Class,这里面逻辑十分复杂,但是我们可以猜想他的作用,不就是通过类加载来实例化我们编写,并组装成RootBeanDefinition,前面我们也说过所有的Bean后续处理都是针对于RootBeanDef原创 2023-08-31 16:24:35 · 4547 阅读 · 0 评论 -
Spring源码分析(七)不同作用域下Bean的创建
其实在Spring中确实没有override-method这样的配置,但是如果读过前面的部分,可能会有所发现,在Spring配置中是存在lookup-method和replace-method的,而这两个配置的加载其实就是将配置统一存放在BeanDefinition中的methodOverrides属性里,而这个函数的操作其实也就是针对于这两个配置的,那么当bean实例化的时候,如果检测到了methodOverrides属性不为空,则动态的为当前bean生成代理并使用相应的拦截器对bean做处理。原创 2023-08-30 15:10:43 · 4663 阅读 · 1 评论 -
Spring源码分析(六)Bean的加载过程
但是可能会存在这样一种情况:返回的 bean 是一个 String,但是 requiredType 却传入 Integer 类型,那么这时候本步骤就起作用了,它的功能是将返回的 bean 转换为 requiredType 所指定的类型。因为bean的初始化过程中很可能会用到某些属性,而某些属性很可能是动态配置的,并且配置成依赖于其他的bean,那么这个时候就有必要先加载依赖的bean,所以,在Spring的加载顺寻中,在初始化某一个bean的时候首先会初始化这个bean所对应的依赖。原创 2023-08-27 12:38:10 · 2336 阅读 · 0 评论 -
Spring源码分析(四)标签的解析之默认标签的解析
BeanDefinition是一个接口,在Spring中存在三种实现:RootBeanDefinition、ChildBeanDefinition以及GenericBeanDefinition。三种实现均继承了AbstractBeanDefiniton,其中BeanDefinition是配置文件元素标签在容器中的内部表示形式。原创 2023-04-19 14:58:02 · 1043 阅读 · 0 评论 -
Spring源码分析(五)标签的解析之自定义标签的解析
在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准bean来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙Spring提供了可扩展Schema的支持,这是一个不错的折中方案,扩展Spring自定义标签配置大致需要以下几个步骤(前提是要把Spring的Core包加入项目中)创建一个需要扩展的组件。定义一个XSD文件描述组件内容。创建一个文件,实现BeanDefinitionParser接口,用来解析XSD文件中的定义和组件定义。原创 2023-04-21 10:52:52 · 738 阅读 · 0 评论 -
Spring源码分析(三)容器的基本实现
一篇文章我们介绍了Spring中的资源加载利器Resource接口,以及下面一些基础的实现类,下面我们按照我们编写的测试案例来分析一下一个自定义Bean是如何加载到容器之中的。原创 2023-08-14 14:37:16 · 2283 阅读 · 0 评论 -
Spring源码分析(二)资源加载利器Resource接口
资源粗略的可以分为(这里以Spring的分类为例)URL资源File资源ClassPath相关资源服务器相关资源(JBoss AS 5.x上的VFS资源)JDK操纵底层资源基本就是java.net.URL 、java.io.File 、java.util.Properties这些:取资源基本是根据绝对路径或当前类的相对路径来取。从类路径或Web容器上下文中获取资源的时候也不方便。原创 2023-08-09 13:28:25 · 1359 阅读 · 0 评论 -
Spring源码分析(一)Spring的环境搭建与架构
Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架,Spring核心是IOC和AOP。方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合度高。AOP编程的支持,通过Spring提供的AOP功能,方便进行面向切面编程。声明式事务的支持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。原创 2023-03-30 21:17:22 · 1202 阅读 · 1 评论 -
Spring补充(一)BeanDefinition详解
AbstractBeanDefinition 是 BeanDefinition 的子抽象类,也是其他 BeanDefinition 类型的基类,其实现了接口中定义的一系列操作方法,并定义了一系列的常量属性,这些常量会直接影响到 Spring 实例化 Bean 时的策略。// 默认的 SCOPE,默认是单例 public static final String SCOPE_DEFAULT = "";原创 2023-04-23 21:25:56 · 2427 阅读 · 0 评论 -
Spring中的注解
Component泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。@component是spring中的一个注解,它的作用就是实现bean的注入。在Java的web开发中,提供3个@Component注解衍生注解(功能与@component一样)Spring在配置Bean中加⼊了@Configuration注解后,底层就会通过Cglib的代理⽅式,来进 ⾏对象相关的配置、处理。原创 2023-08-04 14:24:53 · 4307 阅读 · 0 评论 -
Spring中的事务
1. 隔离属性 默认值 2. 传播属性 Required(默认值) 增删改 Supports 查询操作 3. 只读属性 readOnly false 增删改 true 查询操作 4. 超时属性 默认值 - 1 5. 异常属性 默认值增删改操作 @Transactional 查询操作 @Transactional(propagation = Propagation . SUPPORTS , readOnly = true)原创 2023-08-04 14:24:09 · 4115 阅读 · 0 评论 -
Spring中的IOC
*这是什么意思呢,举个简单的例子,我们是如何找女朋友的?婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。原创 2023-08-04 14:21:09 · 4001 阅读 · 0 评论 -
Spring中的Aop
Spring AOPAOP: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方 式和运行期动态代理实现程序功能的统一维护的一种技术。的一种衍生范型。OOP:面向对象编程,主要实现业务逻辑的封装,关注点是业务逻辑所在的类。OOP中模块化的关键单位是类,而AOP中模块化的单位是切面。原创 2023-08-04 14:18:54 · 3299 阅读 · 0 评论 -
Spring的AOP之代理模式
关于两者之间的性能的话,网上有人对于不通版本的jdk进行测试,经过多次试验,测试结果大致是这样的,在1.6和1.7的时候,JDK动态代理的速度要比CGLib动态代理的速度要慢,但是并没有教科书上的10倍差距,在JDK1.8的时候,JDK动态代理的速度已经比CGLib动态代理的速度快很多了,但是JDK动态代理和CGLIB动态代理的适用场景还是不一样的哈!动态代理生成的代理类通常是在运行时通过字节码生成技术生成的,因此在创建代理对象时,需要一个 ClassLoader 来加载这个新生成的代理类。原创 2023-08-03 17:21:03 · 4979 阅读 · 0 评论 -
Spring 的基本介绍
Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架,Spring核心是IOC和AOP。方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合度高。AOP编程的支持,通过Spring提供的AOP功能,方便进行面向切面编程。声明式事务的支持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。原创 2023-08-01 13:56:58 · 3574 阅读 · 0 评论