
Spring源码解析
tack_back
这个作者很懒,什么都没留下…
展开
-
Spring源码解析(11)——创建代理
创建代理在获取到了增强器后,就开始创建代理了。代理的创建可以通过jdk和cglib两种方式来创建,后续执行目标类的方法时,就是通过这个代理来执行了。在执行的过程中会根据我们之前获取的增强器来创建一个拦截器链,通过执行这一串拦截器链来达到增强的效果。下面我们就根据源码来看看其中的实现逻辑createProxyprotected Object createProxy(Class<?> beanClass, @Nullable String beanName, @Nullable Obj原创 2020-11-14 23:25:25 · 189 阅读 · 0 评论 -
Spring源码解析(10)——获取增强器
获取增强器获取增强器的方法getAdvicesAndAdvisorsForBean是执行的AbstractAdvisorAutoProxyCreator这个类里面getAdvicesAndAdvisorsForBean方法。 @Override @Nullable protected Object[] getAdvicesAndAdvisorsForBean( Class<?> beanClass, String beanName, @Nullable TargetSource t原创 2020-11-14 20:42:28 · 411 阅读 · 1 评论 -
Spring源码解析(9)——AOP
AOP使用首先创建一个TestAopBeanpublic class TestAopBean { private String testStr = "javaGuiji"; public String getTestStr () { return testStr; } public void setTestStr(String testStr){ this.testStr = testStr; } public void testAop(){ System.out.pr原创 2020-11-13 23:12:27 · 123 阅读 · 0 评论 -
Spring源码解析(8)——ApplicationContext
回顾上篇上篇文章《属性注入》,我们已经分析完了bean中的属性是如何注入进去的。到目前为止我们已经分析完了Spring创建一个bean的全流程。先是解析配置的xml文件,将xml文件里配置的信息解析到一个BeanDefinition里面,然后通过BeanDefinition来创建bean,同时也会将bean的属性值注入。这里面也涉及到一个循环依赖的问题,也分析了一下Spring是如何来解决循环依赖的。上面的分析我们都是基于BeanFacotry接口的实现类XmlBeanFactory来分析的,在Sprin原创 2020-10-31 17:27:06 · 125 阅读 · 0 评论 -
Spring源码解析(7)——属性注入
回顾上篇上篇文章《循环依赖》中分析了A类要注入B类的属性,B类中又要注入A类的属性时,Spring是如何通过缓存来解决循环依赖的问题。循环依赖已经分析完了,那么接下来我们就分析一下注入的逻辑又是什么样的。分析源码实现首先在xml配置文件中添加下面的配置。表示A类中要注入属性B。 <bean id="a" class="com.guiji.bean.A"> <property name="b" ref="b"/> </bean>然后执行代码我们看到popu原创 2020-10-18 18:52:22 · 298 阅读 · 1 评论 -
Spring源码解析(6)——循环依赖
回顾上篇上篇文章《获取bean》已经分析完了bean是如何创建出来的,但是获取bean的逻辑远不止这么简单。我们分析bean的获取是直接从创建bean的代码开始分析的,其实在创建bean之前是会先从缓存中去获取bean,如果获取不到才会去创建这个bean,创建成功后会把这个bean放到缓存中。接下来我们看看什么时候会把bean缓存起来以及在什么地方会使用到这个缓存。分析源码实现在创建bean的过程中有两段放缓存的代码。// 这里放入的是创建bean的工厂类,通过getObject()就能够获取这个b原创 2020-10-18 14:39:33 · 126 阅读 · 2 评论 -
Spring源码解析(5)——获取bean
回顾上篇上篇文章《注册BeanDefinition》我们已经分析到,xml配置文件解析完成转化成了一个BeanDefinition,并且这个BeanDefinition存放在了一个beanDefinitionMap里,key就是我们在xml中配置的class属性的值。<bean id="myTestBean" class="com.guiji.bean.MyTestBean"></bean>接下来就可以获取注册的bean了,我们看到我们自己写的测试类BeanFactoryTe原创 2020-10-17 18:01:17 · 184 阅读 · 0 评论 -
Spring源码解析(4)——注册BeanDefinition
回顾上篇上篇文章解析配置文件我们已经分析完了配置文件解析过程,这个时候Spring已经创建了一个BeanDefinition并且将封装到了BeanDefinitionHolder中。接下来我们就接着分析注册BeanDefinition的过程。分析源码实现protected void processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) { BeanDefinitionHolder bdHolder = d原创 2020-07-05 17:26:57 · 499 阅读 · 0 评论 -
Spring源码解析(3)——解析配置文件
回顾上篇上篇文章读取配置文件中,我们已经分析到spring如何读取配置文件(BeanFactoryTest.xml),并最终把配置文件转换成Document 对象。接下来Spring会去解析Document 对象,并创建一个BeanDefinition,将解析出来的信息放到BeanDefinition中。然后将BeanDefinition注册到Spring中。接下来我们就跟着源码,看看Spring是如何来实现的。分析源码实现首先我们debug一下,看看解析配置文件创建出来的BeanDefinition原创 2020-07-05 16:00:20 · 238 阅读 · 0 评论 -
Spring源码解析(2)——读取配置文件
回顾上篇在上篇文章环境搭建中,我们创建了一个测试模块,在测试模块中,我们只要创建一个xml配置文件,配置相关bean信息,我们就能从spring容器中获取到bean,然后调用bean里面的方法。相关代码如下:1、XML配置文件:<?xml version="1.0" encoding="ISO-8859-1"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3原创 2020-06-27 19:09:28 · 268 阅读 · 0 评论 -
Spring源码解析(1)——环境搭建
Spring环境搭建原创 2020-06-27 13:34:06 · 281 阅读 · 0 评论