![](https://img-blog.csdnimg.cn/20190830162517450.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Spring源码相关学习
文章平均质量分 83
Spring源码相关学习
木叶之荣
这个作者很懒,什么都没留下…
展开
-
踩坑记:根据类型获取Spring容器中的Bean
在项目开发中遇到了这样的一个问题:有同事在BeanFactoryPostProcessor的实现方法中写了类似这样的一段代码:@Componentpublic class BeanFactoryPostProcessorImpl implements BeanFactoryPostProcessor { @Override public void postProcess...原创 2018-09-01 23:34:12 · 9699 阅读 · 4 评论 -
Spring系列之Spring框架和SpringAOP集成过程分析(十二)
在这篇文章中我们接着上一篇的文章说。在上一篇文章中我们提到了getAdvicesAndAdvisorsForBean这个方法,这个方法的内容是为目标对象挑选合适的Advisor类,其源码如下: //targetSource 为null protected Object[] getAdvicesAndAdvisorsForBean(Class<?> beanClass,...原创 2018-06-25 23:32:47 · 739 阅读 · 1 评论 -
Spring系列之Spring框架和SpringAOP集成过程分析(十一)
我们在这篇文章中来分析一下AnnotationAwareAspectJAutoProxyCreator这个类。原创 2018-06-23 16:07:35 · 836 阅读 · 0 评论 -
Spring系列之Spring框架和SpringAOP集成过程分析(十)
在开始这个系列之前大家先想一下我们是怎么在项目中使用SpringAOP的(这里的分析都是基于AspectJ注解的)。我们需要在我们的Spring配置文件中引入SpringAOP的命名空间和标签,然后定义切面Bean,进行AOP配置。大概如下所示:<?xml version="1.0" encoding="UTF-8"?&am原创 2018-06-18 16:59:24 · 1222 阅读 · 0 评论 -
Spring系列之AOP分析之对通知方法的执行过程(九)
我们在上一篇文章中说到了前置通知的方法调用AspectJMethodBeforeAdvice#before,在这个before方法中又调用了invokeAdviceMethod这个方法,invokeAdviceMethod这个方法在AspectJMethodBeforeAdvice的父类AbstractAspectJAdvice中。AbstractAspectJAdvice这个是Aspect的所有...原创 2018-06-18 14:42:41 · 4169 阅读 · 0 评论 -
Spring系列之AOP分析之对目标对象的拦截过程(八)
我们在上一篇文章中简单的说了调用动态代理对象方法的过程,也说了AOP拦截器执行链的生成过程。我们接着说AOP对目标对象的拦截过程。下面的代码是我们要分析的重点://proxy:生成的动态代理对象//target:目标对象//method:目标方法//args:目标方法参数//targetClass:目标类对象//chain: AOP拦截器执行链 是一个MethodInterce...原创 2018-05-08 23:23:02 · 7272 阅读 · 1 评论 -
Spring系列之AOP分析之对目标对象的拦截过程(七)
我们在上一篇文章中简单的说了一下SpringAOP使用JDK动态代理生成目标对象的过程,我们在这一篇文章中说一下SpringAOP对生成的动态代理对象的方法的拦截过程(即SpringAOP拦截过程),这个分析的过程可能会比较长。 在上一篇文章中我们说的使用JDK创建动态代理对象是用的JdkDynamicAopProxy这个类,这个类同时实现了InvocationHandler这个接口,实现了它的...原创 2018-04-24 22:49:39 · 1402 阅读 · 1 评论 -
Spring系列之AOP分析之代理对象的创建(六)
我们在之前的文章中说了Advisor的创建过程,Advice的创建过程以及为目标类挑选合适的Advisor的过程。通过之前的分析我们知道,SpringAOP将切面类中的通知方法都封装成了一个个的Advisor,这样就统一了拦截方法的调用过程。我们在这一篇文章中说一下SpringAOP中代理对象的创建过程。先看下面的一张图: 在SpringAOP中提供了两种创建代理对象的方式,一种是JDK自带...原创 2018-04-19 23:39:50 · 4407 阅读 · 1 评论 -
Spring系列之AOP分析之为目标类挑选合适的Advisor(五)
我们在之前的文章中分析了Advisor的生成过程以及在Advisor中生成Advise的过程。在这一篇文章中我们说一下为目标类挑选合适的Advisor的过程。通过之前的分析我们知道,一个切面类可以生成多个Advisor(多个切面类的话那就更多多的Advisor了),这些Advisor是否都能适用于我们的目标类呢?这就需要通过Advisor中所拥有的Pointcut来进行判断了。先回到我们最开始的例...原创 2018-03-29 00:05:41 · 2105 阅读 · 0 评论 -
Spring系列之AOP分析之获取Advice的过程(四)
我们在前面的文章中分析了从切面类中获取Advisor的过程,我们最后创建的Advisor实例为:InstantiationModelAwarePointcutAdvisorImpl,它是一个Advisor和PointcutAdvisor的实现类,所以我们可以从这个类中获取Advice和Pointcut。从之前的分析中我们也看到了Pointcut的赋值,在这一篇文章中我们将会具体分析Advice的创...原创 2018-03-27 23:49:33 · 2023 阅读 · 0 评论 -
Spring系列之AOP分析之获取Advisor的过程续(三)
我们在这一章中继续上一章的分析。我们在上一章中说到了获取到了切面类中所有不带@Pointcut注解的方法,我们看看Spring对我们获取到的这些方法进行了什么操作:for (Method method : getAdvisorMethods(aspectClass)) { //循环切面中所有不带@Pointcut注解的方法。 //method 切面中不带@Pointcut...原创 2018-03-27 22:59:09 · 1216 阅读 · 0 评论 -
Spring系列之AOP分析之获取Advisor的过程(三)
我们在这篇文章中接着上一篇文章的分析。我们在上一篇文章中分析了创建AspectJProxyFactory,并向AspectJProxyFactory中添加目标对象和获取目标对象的过程。我们在这一篇文章中分析调用addAspect方法添加切面的过程。 在AspectJProxyFactory中有两个addAspect重载方法,一个入参是切面实例对象,一个入参是切面类对象。他们两个的区别是:传入实例...原创 2018-03-25 22:10:31 · 3044 阅读 · 0 评论 -
Spring系列之AOP分析(二)
终于要正式开始SpringAOP的分析工作了,在这之前先问个问题:关于AOP你认为最重要的是哪几个地方?我觉得有这样几个地方(理解的不对的地方欢迎指出):一个是AOP的配置(拦截规则的配置),一个是代理对象的创建,一个是统一的拦截调用过程。关于AOP的配置Spring是自己定义了一套规则同时集成了AspectJ的语法,抽象为了Pointcut类。代理对象的创建,SpringAOP定义了一个工厂类A...原创 2018-03-21 23:21:14 · 1515 阅读 · 0 评论 -
Spring系列之AOP分析开篇(一)
在开始Spring的AOP分析之前,先来看一个很老的一个问题。。。假设你在开发的过程中,需要在类A中的方法之前执行一些逻辑(我们称为逻辑A),你可能的一个做法是直接修改类A中的方法,在类A中的方法的开始处写上要添加的代码,你还可能会给类A生成一个代理类,去对调用方法进行拦截,在代理类里面去执行相应的逻辑(逻辑A)。直接修改类A中的方法一般是我们不推荐的方式(存在改动量大、不易扩展等问题),我们通常...原创 2018-03-18 22:49:36 · 1415 阅读 · 1 评论 -
Spring系列之AOP基本主要类概述
在这篇文章中我将对自己了解的AOP中的基本主要类做一个概述,可能不包括一些AOP高级用法的类以及是自己还不了解的类。会不定期的进行补充和修改。SpringAOP基础解析类 类名 作用概述 AopNamespaceHandler AOP命名空间解析类。我们在用AOP的时候,会在Spring配置文件的beans标签中引入:xmlns:aop AspectJAu...原创 2018-03-18 18:45:41 · 2408 阅读 · 0 评论 -
Spring系列之FactoryBean(二)
我们在上一篇文章中说了一下FactoryBean类型的Bean的getObjectType方法被使用到的一个地方,我们在这一篇文章中会说一下FactoryBean是怎么让Spring容器管理调用它的getObject所生成的Bean的。在这篇文章中我们从getBean方法开始说起(我们这里还是要说一下我们现在的beanName的值为:factoryBeanLearn,Class类型为:Factor...原创 2018-03-17 00:21:33 · 3543 阅读 · 3 评论 -
Spring系列之FactoryBean(一)
在我们的开发工作中应该都见过或使用过FactoryBean这个类,也许你会看成了BeanFactory这个类。FactoryBean和BeanFactory虽然长的很像,但是他们的作用确实完全不像。这里你可以想象一下,你会在什么样的场景下使用FactoryBean这个接口?FactoryBean是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个作用是:可以让我们自定义Bean的创建过...原创 2018-03-15 23:39:51 · 91138 阅读 · 37 评论 -
Spring Bean的生命周期小析(二)
在上一篇文章中我们说了BeanFactory中Bean的生命周期(点击这里查看),在这一篇文章中我们说一下ApplicationContex中Bean的生命周期。ApplicationContext中Bean的生命周期和在BeanFactory中的生命周期大致相同,不同的是多了一个BeanFactoryPostProcessor的接口和ApplicationContextAware接口(这个接口会原创 2017-05-21 18:39:52 · 1236 阅读 · 0 评论 -
Spring Bean的生命周期小析(一)
在上一篇(点击这里观看上一篇)中我们用的BeanPostProcessor、@PostConstruct、InitializingBean等都属于Spring Bean生命周期的内容。在这篇文章中我们简单的说一下Bean的生命周期有关的内容。在Spring中,我们可以从两个层面定义Bean的生命周期:第一个层面是Bean的作用范围(Singleton、Prototype以及Web中的Request原创 2017-05-21 12:02:15 · 2924 阅读 · 1 评论 -
Spring AOP中自我调用的问题
前几天在做项目的时候同事说,在使用AOP进行拦截的时候发现有些方法有时候能输出拦截的日志有时候不输出拦截的日志。发现在单独调用这些方法的时候是有日志输出,在被同一个类中的方法调用的时候没有日志输出。我记得之前看过一篇文章是讲Spring事务自我调用不起作用的问题,应该是同样的问题(如果要观看那篇文章请点击这里http://jinnianshilongnian.iteye.com/blog/1487...原创 2017-05-21 00:20:52 · 5663 阅读 · 1 评论 -
Spring学习之资源管理器(Resource)
今天开始Spring学习(希望发展的是Spring的源码学习的系列)的第一章。我们在用Spring做开发的时候,总免不了读取各种各样的资源文件,比如说Spring的xml配置文件、属性的配置文件properties文件等。这些资源文件可能在classPath下面、web容器的上下文中、网络上等等。虽然JDK将不同来源的资源抽象成URL,通过注册不同的handler(URLStreamHandler原创 2017-05-18 13:33:58 · 2656 阅读 · 0 评论