spring学习笔记
文章平均质量分 92
ijbuhv
这个作者很懒,什么都没留下…
展开
-
spring源码分享之容器系列三(spring的依赖注入)
spring的依赖注入是spring的依赖的一个很重要的特性,本文详细介绍了spring在进行属性注入的几种方式以及spring源码中是怎么完成这些属性注入的。AbstractAutowireCapableBeanFactory#populateBeanspring中对属性的赋值操作主要是在populateBean这个方法来完成的。可以看到这个populateBean主要做了四件事。调用InstantiationAwareBeanPostProcessor的afterInstantiation.原创 2020-07-22 20:24:10 · 385 阅读 · 0 评论 -
spring源码分享之容器系列四(bean的实例化,LookupMethod,ReplaceMethod)
spring-beans中提供的注解主要是在annotation包下的,主要是下面的6个<code>@Autowired</code>原创 2020-07-28 13:56:41 · 397 阅读 · 0 评论 -
关于spring循环依赖的思考
spring主要处理的是属性注入的循环依赖,即beanA的属性中有beanB,beanB的属性中有beanA。而其主要的解决方式则是在创建beanA但是还有没有对beanA进行赋值之前先将beanA的索引注册到容器中,而在beanA进行属性赋值时会引起beanB的创建操作,而在beanB的创建过程中需要进行属性赋值,而其获取beanA的属性值则是获取的beanA先暴露到容器的对象。下面来详细描述一下上面那段解释,首先写一个循环依赖的例子:@Componentpublic class Circ原创 2020-07-13 10:49:59 · 164 阅读 · 0 评论 -
spring源码分享之容器系列二(类型转换)
spring的类型转换基本上是在TypeConverterDelegate来完成的,其首先是利用PropertyEditor来进行转换的,这个接口是在java.beans中定义的,主要是在GUI上操作的,其主要的转换方式是String类型与其他类型的转换。由于PropertyEditor的局限性,spring自己定义了一套类型转换器,这个类型转换器是定义在spring-core包下,对外接口主要是ConversionService来进行类型转换,而ConversionService则是将类型转换委托给注原创 2020-07-08 20:10:16 · 349 阅读 · 0 评论 -
spring源码分享之容器系列一(bean)
BeanWrapper是在beanFactory进行实例化bean后对对应的bean进行包装,并利用这个BeanWrapper完成对应的依赖注入的操作。BeanWrapperImpl的继承树下面图描述了BeanWrapperImpl的继承树,可以看到BeanWrapperImpl通过一层层继承最终实现了PropertyEditorRegistry,TypeConverter,PropertyAccessor,ConfigurablePropertyAccessor以及BeanWrapper这5个接口。不原创 2020-07-08 11:11:12 · 246 阅读 · 0 评论 -
spring源码分享之Aop系列五(Advisor的自动载入和Advice调用链顺序)
最近在读spring-aop的源码的时候发现advisor的排序是一件有意思的事情,所以特别来写一遍分享一下自己的理解。spring-aop对其对应的bean的增强主要是利用AbstractAutoProxyCreator中的getAdvicesAndAdvisorsForBean获取对应的advisors链,并将这个advisors链注入到ProxyFactory,然后利用ProxyFactory将这个advisors转换为Advice调用链,这个转换过程中,顺序没有发生改变,所以其默认的Advice调原创 2020-07-06 17:09:19 · 680 阅读 · 0 评论 -
spring源码分享之Aop系列四(advisor,pointcut和targetSource)
前面介绍了advice以及adivce是怎么进入到目标的调用链中进行调用的,不过在spring中advice都是包在advisor中进行注册的,而pointcut则是切面,主要用来匹配对应的方法是否需要进行Advice增强,而targetSource则是代理的目标源,这个源可以是单例,实例池等。Advisor可以看到Advisor的下层主要是两个子接口IntrodutionAdvisor和PointcutAdvisor以及一个PrototypePlaceholderAdvisor。这个ProtoTyp原创 2020-07-02 15:56:46 · 854 阅读 · 0 评论 -
spring源码分享之Aop系列三(代理)
总体架构对于spring-aop的代理对象,主要是创建ProxyFactory,然后ProxyFactory创建AopProxyFactory来创建AopProxy,然后用AopProxy创建对应的Proxy。而对于创建出来的代理类Proxy中的方法调用则是将从AdvisedSupport中获取的MethodInterceptor拦截链以及其目标的方法组成MethodInvocation进行调用。ProxyFactory的父类们ProxyConfig可以看到这个类是很多类的基类,向后面介绍的用于原创 2020-06-28 11:45:03 · 293 阅读 · 0 评论 -
spring源码分享之Aop系列二(advice篇)
上一篇aopalliance中介绍了Advice家族,spring中关于Advice的实现有很多,其中主要有和aspectj适配的相关advice,对MethodInterceptor的适配,以及对DynamicIntroduceAdvice的实现等相关作用,下面主要介绍一下这些Advice的实现。spring-aop中的Advice我们知道spring中主要有六种Advice,分别为前置通知(BeforeAdvice),后置通知(AfterAdvice) ,方法返回后通知(AfterReturingA原创 2020-06-20 14:46:39 · 663 阅读 · 0 评论 -
spring源码分享之Aop系列一(aopalliance接口定义)
Aop Alliance项目是许多对Aop和java有浓厚兴趣的软件开发人员联合成立的开源项目,不过这个项目下主要是有几个接口的定义,spring没有对其jar包进行依赖,而是将其项目源码直接放入了到了其源码包中。在介绍spring-aop之前,有必要先介绍一下这些接口aopalliance的接口aop联盟在aop主要定义了两类接口,一类的是JoinPoint为最高抽象,一类的最高抽象是Advice。可以看到在aop联盟中的核心就是两个,一个就是连接点,一个就是通知,对于连接点表示的是事件,像方法调用原创 2020-06-20 14:31:57 · 595 阅读 · 0 评论 -
spring源码分享---事务
核心逻辑spring的核心逻辑是通过TransactionInterceptor来代理对应的方法,并根据TransactionInfo来维护当前方法下的对应的事务状态信息。下图展示了其核心逻辑。其对应的代码为: final TransactionAttribute txAttr = getTransactionAttributeSource().getTransactionAttribute(method, targetClass); final PlatformTransactionMana原创 2020-06-12 10:30:34 · 276 阅读 · 0 评论 -
spring Bean 的生命周期
Bean的生命周期Bean生命周期分类1.Bean自身方法:构造方法,set方法,init-method,destroy-method方法2.Bean级生命周期接口方法:BeanNameAware , BeanFactoryAware3.容器级生命周期接口方法:InstantiationAwareBeanPostProcessor , BeanPostProcessor,不由Bean实现例子原创 2016-11-18 15:02:39 · 273 阅读 · 0 评论