Spring
文章平均质量分 96
GDUT_Ember
这个作者很懒,什么都没留下…
展开
-
Spring(二十):ObjenesisCglibAopProxy
回顾ObjenesisCglibAopProxy拦截器链如何形成自定义拦截CglibMethodInvocation回顾上一章仔细分析了Spring对于JDK代理的代理类的invoke方法,也填下了之前没有接触AOP导致循环依赖未彻底弄明白的坑,下面就认识一下Spring对于Cglib代理是如何实现的ObjenesisCglibAopProxy仍然都是由ObjenesisCglobAopProxy创建的可以看到其构建方法仅仅只是初始化了父类而已拓展:这里拓展一下之前是如何使用Cglib代理.原创 2021-11-03 18:52:01 · 516 阅读 · 0 评论 -
Spring(十八):AOP——寻找匹配的增强器
回顾返回AbstractAdvisorAutoProxyCretorfindAdvisorsThatCanApplyAopUtilscanApply方法AOP——创建切面createProxy方法封装Advisors创建代理creatAopProxt回顾上一篇,我们已经看了如何AOP如何对标签进行解析,并且生成了一系列的增强器,比如建言增强器、同步实例化增强器、DeclaredParent增强器,但找到这些增强器并不一定都适用,还要进行匹配的返回AbstractAdvisorAutoProxyCre.原创 2021-11-02 21:40:34 · 422 阅读 · 0 评论 -
Spring(十九):AOP代理——JdkDynamicAopProxy、填坑:AOP代理与上循环依赖
回顾JdkDynamicAopProxy曝光代理对象拦截器链的执行填坑:AOP曝光与创建Bean时的曝光getProxy回顾之前我们已经详细说明了Bean是如何被代理的,最终Bean会被解析成JdkDynamicAopProxy或者ObjenesisCglibAopProxy对象了,对应JDK代理和Cglib代理,下面就来仔细看看这两个对象吧还是回到之前DefaultAopProxyFactory的createAopProxy这里的config已经有了之前解析出来的增强器和拦截器了(一个总的数组.原创 2021-11-02 21:29:31 · 1004 阅读 · 0 评论 -
Spring(十七):AOP——获取增强器
回顾获取增强器getAdvisor方法获取切入点取出匹配的注解封装数据根据切入点信息生成增强方法初始化增强器AspectJMethodBeforeAdviceAspectJAfterAdvice增加同步实例增强器获取DeclareParents注解回顾前面已经讲述了大致的AOP流程,从解析配置文件里面的AOP标签到创建AOP代理时去获取所有的增强方法,但对于增强方法的获取还没有看到具体实现的底层,下面就来看看具体的底层实现获取增强器回到ReflectiveAspectJAdvisorFactory.原创 2021-10-31 21:16:54 · 390 阅读 · 0 评论 -
Spring(十六):创建AOP代理
使用AOP动态AOP标签AspectJAutoProxyBeanDefinitionParser解析器parse函数注册AnnotationAwareAspectJAutoProxyCreator注册或者升级AnnotationAutoProxyCreator处理proxy-target-class以及expose-proxy属性创建AOP代理AnnotationAwareAspectAutoProxyCreator的架构wrapIfNecessary寻找需要增强的方法获取所有的增强this.adviso.原创 2021-10-29 22:07:10 · 421 阅读 · 0 评论 -
Spring(十四):继续创建单例Bean,提前曝光、属性注入与初始化Bean
回顾addSingletonFactory方法populateBean方法根据注入的类型进行提取依赖beanAUTOWIRE_BY_NAMEunsatisfiedNonSimplePropertiesPropertyDescriptor[] pds = bw.getPropertyDescriptors();PropertyValues pvs = mbd.getPropertyValues();AUTOWIRE_BY_TYPEresolveDependencygetLazyResollutionProx.原创 2021-10-24 16:39:35 · 646 阅读 · 0 评论 -
Spring(十三):创建Bean——使用构造方法创建Bean
回顾使用构造方法构建Beaninstantiate方法实例化策略没有覆盖方法的实例化拥有覆盖方法的实例化总结一下回顾前面已经看了整个Bean的加载过程了,并且在上一章已经看到了,Spring如何对Bean的构造方法进行筛选,Spring将筛选构造方法和使用构造方法创建Bean都交由了ConstructResolver负责下面就看下,Spring如何利用构造方法来创建Bean的使用构造方法构建Bean先看一下ConstrutResolver找到了构造方法是如何实例Bean的可以看到,代码为b.原创 2021-10-16 22:59:20 · 2188 阅读 · 0 评论 -
Spring(十二):bean的加载——创建bean
回顾前面已经看了在加载Bean的时候,如何去解决循环依赖的问题,解决完循环依赖,就到创建Bean的步骤了,而创建bean的步骤是紧紧接着创建Bean实例Bean根据范围会分为几种单例原型自定义范围每种范围都会有自己不同的生命周期创建单例Bean源码如下// Create bean instance.//判断是不是单例模式if (mbd.isSingleton()) { //调用getSingleton方法 sharedInstance = getSingleton(be原创 2021-10-14 21:42:20 · 427 阅读 · 1 评论 -
Spring(十一):bean的加载——检测循环依赖
回顾bean的加载getBean方法doGetBean方法从缓存中获取单例beangetSingleton原型模式下解决循环依赖判断当前原型Bean是否正在创建中从容器中取出RootBeanDefinitions合并RootBeanDefinition加载依赖bean获取RootBeanDefinitions的依赖判断当前依赖的bean是否产生循环依赖注册依赖bean回顾前面我们已经看过了对于XML中的bean、alias、import、beans标签的解析现在IOC容器中已经有着bean的配置了,.原创 2021-10-07 21:04:19 · 1840 阅读 · 7 评论 -
Spring(十):alias标签、import标签和beans标签的解析
回顾alias标签解析检查是否有循环引用问题总结一下import标签解析Beans标签解析回顾前面几篇,将Bean的标签解析整个流程弄懂了,但对于整个XML配置文件的解析是包括以下标签的bean:用于创建IOC容器创建对象alias:用于给Bean起别名import:用于导入其他配置文件(有时候我们喜欢将Spring的配置文件分开单独处理,比如mybatis整合是一个文件、springmvc的整合又是另外一个文件,但Spring读取只会解析一个总文件,所以我们可以在总文件使用import标签导.原创 2021-09-28 23:20:43 · 1277 阅读 · 0 评论 -
Spring(九):Bean创建的最后一步——通知监听器
回顾通知监听器对Bean的解析及注册完成EmptyReaderEventListenerCollectiongReaderEventListener回顾前面我们已经看了一个Bean的注册流程注册BeanName注册Bean的别名认识了一个重要的对象GenericApplicationContext,这个对象装饰了BeanFactory(DefaultListableBeanFactory),通过这个ApplicationContext去与IOC容器(DefaultListableBeanFa.原创 2021-09-28 23:17:27 · 565 阅读 · 0 评论 -
Spring(八):注册Bean
回顾注册BeanDefinition根据Bean的名字进行注册总结一下根据Bean的名字进行注册根据Bean的别名进行注册回顾spring解析Bean主要分为三步创建普通的BeanDefinition(解析默认的属性、XML标签)修饰创建出来的BeanDefinition(解析自定义的属性和标签)注册BeanDefinition下面就来看一下如何进行注册的!对应代码就是下面这一行,注册BeanDefinition可以看到,解析和修饰BeanDefinition都是交由delegate.原创 2021-09-27 21:15:59 · 725 阅读 · 1 评论 -
Spring(七):修饰Bean(自定义标签与属性的解析)
回顾AbstractBeanDefinition下一步:对创建的BeanDefinition进行修饰修饰子标签与属性总结一下回顾前面两节已经看完了对一个Bean标签的解析了,至此一个完整的GenericBeanDefinition就诞生了,完成了从XML文档到GenericBeanDefinition的转换,现在XML的所有配置,我们都可以从GenericBeanDefinition中找到对应的配置但其实,GenericBeanDefinition只是一个子类而已,大多数的实现细节还是在Abstra.原创 2021-09-25 15:17:57 · 306 阅读 · 0 评论 -
Spring(六):Bean标签解析(三)
回顾解析property标签parsePropertyElements方法parsePropetyElement方法parsePropertyValue方法PropertyValue是怎样被记录的?解析qualifier标签parseQualifierElement方法回顾前面已经看了父Bean标签对下面几种标签的解析meta标签lookup-method子标签replaced-method子标签construct-arg子标签(构造器注入)这几种标签,其实不都怎么常用,通常我们使用最多.原创 2021-09-23 22:05:42 · 690 阅读 · 1 评论 -
Spring(五):bean标签解析(二)
解析其他标签开启追踪、并获取class和parent属性创建用于属性承载的BeanDefinitionAbstractBeanDefinitioncreateBeanDefinition方法解析各种属性parseBeanDefinitionAttributesscope作用域与init-method、destory-method生命周期parseMetaElementsparseLookupOverrideSubElementsparseReplacedMethodSubElementsparseCons.原创 2021-09-16 22:18:02 · 360 阅读 · 0 评论 -
Spring(四):bean标签解析
回顾Bean标签的解析及注册parseDefaultElement方法nodeNameEquals方法(判断当前的标签是什么标签)解析Bean标签processBeanDefinition方法解析BeanDefinition进一步解析bean中的其他属性回顾前面我们也已经看到了,Spring的注册Bean的大概流程选择XML的校验模式(有DTO选DTO,没有就为XSD)使用DefaultLoadDocument解析Dom对象注册Bean解析Profiles属性(判断当前激活环境是否符合Pr.原创 2021-09-14 16:02:35 · 353 阅读 · 0 评论 -
Spring(三):Dom解析与注册流程分析
获取Dom信息并注册获取XML的验证模式DTO和XSD验证模式的区别验证模式的获取getValidationModeForResource配置文件去获取validationMode(detectValidationMode方法)ValidationModeDector的detectValidationMode方法解析DocumentDefaultLoadDocumentEntityResolver对象解析及注册BeanDefinitionsregisterBeanDefinitions方法BeanDefi.原创 2021-09-12 21:46:04 · 292 阅读 · 0 评论 -
Spring(二):容器的实现——配置文件封装与加载Bean过程
XmlBeanFactory配置文件封装InputStreamSourceResource加载BeanEncodedResourceloadBeanDefinitions方法doLoadBeanDefinitions方法前面认识了两大核心类DefaultListableBeanFactoryXmlBeanDefinitionReader对整体架构有了一定的认识,对容器功能有了大致的认识,下面就来看看容器的基础XmlBeanFactoryXmlBeanFactory是容器的基础,继承了Def.原创 2021-09-11 11:46:16 · 372 阅读 · 0 评论 -
Spring(一):容器的实现——两大核心类
分析容器如何实现Spring的结构组成beans包的层级结构核心类DefaultListableBeanFactoryXmlBeanDefinitionReaderXmlBeanDefinitionReader的执行步骤分析容器如何实现在Sping官网中的一段入门代码todo步骤如下读取Spring的配置文件从配置文件中找到对应Bean的信息(bean的那一段信息)根据找到的Bean信息进行实例化Bean所以要想实现容器,至少需要3个类ConfigReader:用来读取和校验配置文.原创 2021-09-09 21:00:59 · 615 阅读 · 1 评论