
spring源码从入门到精通
文章平均质量分 73
spring源码
后端从入门到精通
作者keying,擅长mysql,负责项目组mysql调优,jvm调优,代码性能优化,欢迎私信加好友(ke1ying)探讨问题。
展开
-
获取拦截器链MethodInterceptor---Spring源码从入门到精通(二十二)
上篇文章介绍了AOP代理,主要返回了cglib增强对象,增强对象就是指被aop类切入的目标对象,在创建bean之前,可以用 后置处理器beanPostProcessorBeforeInstantiation返回缓存中存在的 bean:创建AOP代理---Spring源码从入门到精通(二十一)这篇文章主要介绍methodInterceptor,返回拦截器:一、目标方法执行(指切面类切入的MathCalculation方法): 容器中保存了组件代理对象(cglib增强后的对象),这个对...原创 2021-07-12 16:24:17 · 383 阅读 · 0 评论 -
声明式事务---Spring源码从入门 到精通 (二十五 )
上篇文章aop源码运行总结:AOP总结目录--- Spring源码从入门到精通(二十四)这篇文章主要介绍事务的作用 :事务可以在运行的业务发生异常时,保证这里面对数据库的操作都进行回滚,保证原子性,要么全部成功,要么全部失败,不会出现张三扣款5元成功,李四未收到5元转账。先贴上项目目录:一、事务环境搭建先导入我们需要的数据源,数据库,springjdbc,数据源c3p0和 数据库 mysql我们之前已经导入过maven包,接下来导入springjdbc的maven: .原创 2021-07-13 10:47:26 · 129 阅读 · 0 评论 -
AOP源码解析(2)AnnotationAwareAspectAutoProxyCreator---Spring源码从入门到精通(十九)
上篇文章主要讲了AOP的@EnableAspectAutoProxy注解,里面导入的类和执行的后置处理器:AOP源码解析(1)---Spring源码从入门到精通(十八)阅读本篇文章,一定要先阅读上篇文章,运行的源码是基于上篇文章的代码,才方便理解,如果跳着阅读,感觉内容生涩,概不负责。1、首先传入配置类到annocationConfigApplicationContext,创建ioc容器。2、之后注册配置类,调用refresh(),刷新容器。3、registerBeanPostPro原创 2021-07-07 21:07:37 · 216 阅读 · 2 评论 -
自动装配构造器&方法---Spring源码从入门到精通(十三)
上篇文章主要介绍了@Resource和@inject:1)、这两个都是java的jre规范,之前的@Autowired是spring规范。2)、@Resource(name="")可以用name指定加载的组件名称,和@Autowired不同,@Autowired默认按类型加载,必须和@Qualifier一起才可以指定名字。3)、@Resource不可以和@Parimary连用,也不可以用@Autowired(required=false)。4)、@Inject必须导入mvn包,也不可以用@A原创 2021-07-02 17:02:37 · 236 阅读 · 3 评论 -
Spring源码从入门到精通---@Autowired&@Qualtify(十一)
上篇文章主要讲了@Value的赋值:普通赋值,@Value("#{}"),spEl表达式赋值,@Value("&{}")读取配置文件赋值:Spring源码从入门到精通---@Value赋值(十)这篇文章主要介绍spring的自动装配,DI依赖注入,各个组件赋值,完成在IOC容器的组件调用。常用的@Autowird按类型去ioc容器中找组件注解,与之对应的有个@Resource按名称注解以后在讲解。1、@Autowired1)、默认优先[按照类型]去ioc容器中找组件 Annotati原创 2021-07-01 20:26:42 · 161 阅读 · 1 评论 -
AOP源码解析(3)---Spring源码从入门到精通(二十)
上篇文章主要介绍了beanPostProcessor后置处理器如何注册并创建组件的:AOP源码解析(2)AnnotationAwareAspectAutoProxyCreator---Spring源码从入门到精通(十九)前两篇文章是创建后置处理器(如:AnnotationAwareAspectJAutoProxyCreator)的过程,这篇文章开始创建bean。finishBeanFactoryInitialization创建单实例bean。beanFactory.preInstanti原创 2021-07-09 20:55:30 · 154 阅读 · 2 评论 -
连接器链调用---Spring源码从入门到精通(二十三)
上篇文章主要介绍了methodInterceptor拦截器吧增强组件返回的过程:获取拦截器链MethodInterceptor---Spring源码从入门到精通(二十二)这篇文章主要介绍拦截器链如何触发:一、拦截器链的触发过程1、首先第一个判断是,返回的拦截器集合为空,则直接执行目标方法。(后面的proceed方法里,拦截器的索引等于拦截去数组-1,也就是执行到了最后一个拦截器,也是直接执行目标方法)若不为空,CglibMethodInvocation调用proceed()。.原创 2021-07-12 19:15:55 · 166 阅读 · 2 评论 -
AOP功能代码实例---Spring源码从入门到精通(十七)
上篇文章主要介绍了@Profile注解:可以对不同的开发环境(test,dev),选择性加载不同的组件,如果用AnnocationConfigApplicationContext,需要用无参构造函数,先自己getEnviroment,设置指定加载的test环境,还是dev环境。Spring源码从入门到精通---@Profile(十五)这篇文章主要介绍面向切面AOP:动态代理,面向切面aop是一种开发思想,指在系统运行的情况下,吧代码插入到项目中指定的位子。一、定义业务逻辑 类 和 切面类原创 2021-07-06 15:01:10 · 192 阅读 · 0 评论 -
Spring源码从入门到精通---@Value赋值(十)
上篇文章介绍了BeanPostProcessor,spring框架生命周期@PostConstruct,@PreDestroy,依赖注入@Autowird都离不开这个接口,在bean对象初始化前后还可以调用方法执行事务,对此接口源码也做了深入的了解,在对bean初始化之前,会调用方法先对bean注入属性赋值 ,感兴趣的可以点进去看看:生命周期BeanPostProcessor(3)---Spring源码从入门到精通(九)这篇文章主要介绍@Value如何获取值,先给大家贴上项目目录:目录1原创 2021-06-30 17:17:55 · 235 阅读 · 1 评论 -
Ioc容器refresh总结(5)--- Spring源码从入门到精通(三十五 )
上篇文章主要介绍:先创建applicationEventMulticaster多播(派发)器,再注册registerListener添加到派发器中,之后下篇文章将介绍如何调用spring监听,这篇文章先介绍bean创建,因为监听在bean创建完成之后调用。Ioc容器refresh总结(4)--- Spring源码从入门到精通(三十四 )十一、finishBeanFactoryInitializationpreInstantiateSingletons;初始化剩下的单实例bean。获取容器中原创 2021-07-27 20:05:06 · 202 阅读 · 1 评论 -
@Conditional---Spring源码从入门到精通(四)
上篇文章:Spring源码从入门到精通---@Scope&@Lazy(三)大家是否都用过System.getProperties.getPropertite(“os.name”),获取过登入系统,这篇文章就看Conditional注解源码,如何获取系统信息。@Conditional作用只有一个实例会给ComponentScan扫描(好多文章说的是只有一个实例给容器管理,我的理解是不对的,ComponentScan扫描之后才给容器,如果被过滤了,容器里面就没有)。所以他在Component原创 2021-06-27 22:30:20 · 181 阅读 · 1 评论 -
生命周期BeanPostProcessor(3)---Spring源码从入门到精通(九)
上篇文章主要介绍了Bean生命周期,bean生命周期:创建bean--->初始化init--->销毁destory,而初始化和销毁是可以用@Bean指定的,或者用@preDestory等注解,接口都能指定调用的初始化和销毁方法:Bean生命周期(2)---Spring源码从入门到精通(八)这篇主要介绍BeanPostProcessor,在spring框架非常重要,里面有两个接口,一个是postProcessBeforeInitialization 和 postProcessAfterIn原创 2021-06-29 19:30:44 · 490 阅读 · 1 评论 -
Spring源码从入门到精通---@Scope&@Lazy(三)
上篇文章主要介绍了@ComponentScan的注解:https://blog.youkuaiyun.com/ke1ying/article/details/118196137?spm=1001.2014.3001.5501这篇文章主要介绍单例模式,多例模式,懒加载,先上目录结构,这篇文章先创建了beanConfig2文件。1、多例模式,单例模式多例模式:@Scope的value指定为prototype,IOC容器初始化完毕之后,获取bean实例的时候加载bean,两次获取的对象实例不是同一个地址值原创 2021-06-24 22:40:38 · 158 阅读 · 0 评论 -
Aware&原理---Spring源码从入门到精通(十四)
上篇文章主要介绍@Autowired自动装配:1、Bean注解+传参在方法上,自动装配,参数会从ioc容器从获取。2、有参构造器如果只有一个的情况下,也可以省略@Autowired不写,自动装配。感兴趣的同学可以点进去看看:自动装配构造器&方法---Spring源码从入门到精通(十三)这篇文章主要介绍Aware的使用,大家有没有想过,我们自定义的组件放在ioc容器中,如何在自定义组件里调用spring底层组件呢,这时候Aware就能帮你实现,setApplicationConte原创 2021-07-04 13:57:50 · 246 阅读 · 0 评论 -
Spring源码从入门到精通---@Import(五)
如何给容器注册bean:ComponentScan+注解(如:@Controller,@Service,@Compoment,@Repository) @Bean+@Configuration定义导入的第三方bean @Import(相对于Bean的优势:快速给容器中导入一个组件)这篇文章着重介绍import下面三个用法,springboot用importSelector接口非常多。1)@import注解,直接导入容器,id默认全类名。2) 自定义类实现importSe...原创 2021-06-28 16:52:20 · 174 阅读 · 0 评论 -
Spring源码从入门到精通---@ComponentScan(二)
上篇文章主要介绍了spring通过配置文件和注解获取实例对象:https://blog.youkuaiyun.com/ke1ying/article/details/118188934?spm=1001.2014.3001.5501这篇文章主要介绍ComponentScan注解,老规矩,先看项目结构:1、配置文件配置扫描路径传统的在xml配置文件配置路径,配置之后,在此路径下的@Controller,@Service,@Repository,@Component类都能扫描到<?xml v原创 2021-06-24 21:49:05 · 202 阅读 · 1 评论 -
Ioc容器refresh总结(6)--- Spring源码从入门到精通(三十六)
上篇文章主要介绍了finishBeanFactoryInitialization:创建bean会调用很多后置处理器,每个后置处理器完成的功能都不同,非常重要。Ioc容器refresh总结(5)--- Spring源码从入门到精通(三十五 )十一、finishBeanFactoryInitialization上篇文章的方法里还剩下最后一步:通过getBane创建bean完成之后,会判断所有的bean是不是这个接口SmartInitializaingSingleton接口。如果是则执原创 2021-07-28 13:44:13 · 160 阅读 · 0 评论 -
Spring源码从入门到精通---FactoryBean接口(六)
上篇文章介绍了如何吧bean注入容器:1、@ComponentScan+注解(@Controller,@Service,@Repository,@Component)2、@Bean+@Configuration(适用于第三方导入组件的注入)3、@Import,import分为直接导入,也可以实现importSelector接口返回类全名注册组件,也可以实现ImportBeanDefinitionRegister接口自定义id名称,手动注册bean。Spring源码从入门到精通---@Impo原创 2021-06-28 19:00:33 · 202 阅读 · 2 评论 -
ApplicationListener--- Spring源码从入门到精通(二十九)
上篇文章说了bean对象创建之前调用的两个方法:BeanDefinitionRegistryPostProcessor--- Spring源码从入门到精通(二十八)这篇文章主要介绍spring监听事件源码及实例解析:ApplicationListener:监听容器中发布的事件,事件驱动模型的开发。写一个监听器来监听某个事件(ApplicationEvent) 吧监听器加入到容器 只要容器中有相关事件发布,就能监听到:A、ContextRefreshedEvent容器刷新完成,所有bean原创 2021-07-20 17:30:05 · 181 阅读 · 0 评论 -
Ioc容器refresh总结(4)--- Spring源码从入门到精通(三十四 )
上偏文章介绍了,registerBeanPostProcessor:分别按优先级顺序先注册PriorityOrdered和Ordered接口,第三部注册没有实现接口的beanPostProcessor,最后注册mergedBeanDefinitionPostProcessor。Ioc容器refresh总结(3)--- Spring源码从入门到精通(三十三)七、initMessageSource1、获取beanFactory。2、看容器中是否存在id为messageSource,有的话就按原创 2021-07-26 15:17:24 · 194 阅读 · 0 评论 -
Spring源码从入门到精通---@Resource&@Inject(十二)
上篇文章介绍了自动装配的@Autowired注解1)、AnnotationConfigApplicationContext.getBean(Bookdao.class)默认是按类型去IOC容器中找组件,若同一个对象找到两个以上组件,则会调用AnnotationConfigApplicationContext.getBean(""),按组件名称查到。2)、他可以 和@Qualifier()一起用,指定组件名称。3)、也可以设置@Autowired(required=false),默认是true,表原创 2021-07-02 12:21:44 · 155 阅读 · 3 评论 -
AOP源码解析(1)---Spring源码从入门到精通(十八)
上篇文章用代码实现了AOP功能日志打印,定义切面类,用@Aspect标注这是切面类,最后要记得用@EnableAspectAutoProxy注解启动切面功能模块。AOP功能测试---Spring源码从入门到精通(十七)这篇文章主要介绍AOP原理,看看给容器中注册了什么组件,这个组件在何时工作,组件的功能。一、@EnableAspectAutoProxy注解是什么?点进这个注解,看源码可以知道,给容器中导入@Import(AspectAutoProxyRegister.class),1、通原创 2021-07-06 17:42:33 · 192 阅读 · 2 评论 -
Spring源码从入门到精通---@Profile(十五)
上篇文章主要说了Aware接口:如何吧spring底层组件赋值到自定义组件里呢,可以实现xxxAware接口,比如实现ApplicationContextAware接口,可以获取到applicationContext。这些都是由xxxAwareProcessor后置处理器处理的,如ApplicationContextAwareProcessor,先创建bean之后,后置处理器处理吧对应的数据赋值。这篇文章主要说@Profile:文章分为两个部分,第一部分,数据源环境的搭建。第二部分,@Profi原创 2021-07-04 22:59:35 · 220 阅读 · 2 评论 -
Spring源码从入门到精通---@Configuration&@Bean(一)
想了很久,决定整理份 连载的Spring源码(良心干货),供大家参考学习,本文是连载的第一篇文章,主要从spring加载实例bean开始讲起。先贴上目录结构:1、配置文件getBean传统的spring,建立Person实体类,beans.xml文件,在里面指定bean,指定id,property指定实体类的name和age,实例类记得写上get,set方法,有参构造函数和无参构造函数,toString方法。之后写个mainTest类就可以测试从配置文件获取bean。下面附上代码:...原创 2021-06-24 18:25:18 · 174 阅读 · 0 评论 -
Ioc容器refresh总结(2)--- Spring源码从入门到精通(三十二)
上篇文章介绍了refresh里beanFactory的创建预准备工作,refresh获取到的beanFactory是先刷新创建,在getBeanFactory获取到的,之后再给他配置忽略自动装配的依赖接口,和配置自动装配的组件。Ioc容器refresh总结(1)--- Spring源码从入门到精通(三十一)这篇文章主要介绍beanFactory后置处理器如何调用beanFactory:五、invokeBeanFactoryPostProcessorBeanFactoryPostProcess原创 2021-07-22 15:13:59 · 168 阅读 · 0 评论 -
Ioc容器refresh总结(1)--- Spring源码从入门到精通(三十一)
上篇文章主要介绍了EventListener注解的使用及源码分析:注解是由EventListenerMethodProcessor后置处理器里的afterSingletonsInstantiated方法,而这个方法顾名思义,在单实例对象初始化之触发的,全部都在ioc容器refresh方法里面。@EventListener--- Spring源码从入门到精通(三十)这篇文章主要介绍refresh方法:一、prepareRefresh()initPropertySources刷新前的预处原创 2021-07-22 15:03:03 · 244 阅读 · 0 评论 -
创建AOP代理---Spring源码从入门到精通(二十一)
一、bean创建对象之前每个bean创建对象之前都会调用beanPostProcessorBeforeInstantiation,因为实现了InstantiationAwareBeanPostProcessor。我们来看看前面自定义切面类LogAspects和业务了MathCalculate创建bean之前如何调用的。判断advisedBeans是否存在bean(包含了需要增强的bean) 判断当前bean是否是基础类型,是不是实现了Advice,Pointcut,Advisor,AopInf原创 2021-07-11 14:51:48 · 168 阅读 · 0 评论 -
声明式事务源码解析--- Spring源码从入门到精通(二十六)
一、@EnableTransactionManagerment里面import一个TransactionManagementConfigurationSelector选择器,里面的selectImports方法,从注解的源码可以看到,Advicemodel默认是proxy,所以此方法中case选择proxy后导入两个组件,一个是AutoProxyRegistrat,一个是ProxyTransactionManagementConfiguration。1、AutoProxyRegistrat:给.原创 2021-07-13 20:37:29 · 207 阅读 · 1 评论 -
BeanDefinitionRegistryPostProcessor--- Spring源码从入门到精通(二十八)
上篇文章介绍了BeanFactoryPostProcessor接口,在bean创建对象之前,如何执行的:BeanFactoryPostProcessor--- Spring源码从入门到精通(二十七)这篇文章主要介绍他的子接口:beanDefinitionRegisterPostProcessor:所有bean的定义信息将要被加载,在bean创建对象之前调用。和上篇文章的BeanFactoryPostProcessor不同,上篇文章是:所有bean的定义信息已经加载进入beanFactor原创 2021-07-20 14:33:51 · 216 阅读 · 0 评论 -
Bean生命周期(2)---Spring源码从入门到精通(八)
上篇文章介绍了,可以通过@Bean注解来指定bean创建和销毁方法,init-method和destory-method:Bean生命周期(1)---Spring源码从入门到精通(七)这篇主要介绍,InitializingBean, DisposableBean接口 和 @PostConstruct,@PreDestroy注解来实现bean生命周期创建和销毁方法的调用。1、InitializingBean, DisposableBean先定义Dog类,实现这两个接口,重写destroy销毁方原创 2021-06-28 21:07:24 · 202 阅读 · 2 评论 -
@EventListener--- Spring源码从入门到精通(三十)
上篇文章介绍实现ApplicationListener接口实现spring事件监听:ApplicationListener--- Spring源码从入门到精通(二十九)这篇文章介绍注解实现事件监听@EventListener,eventListener注解如何实现监听某个事件,然后源码里在调用上篇文章说的finishRefresh方法派发事件监听。本篇文章通过代码实例和源码分析来说明eventListener注解。一、代码实例自定义userService,方法上用@EventListen原创 2021-07-21 15:03:00 · 249 阅读 · 0 评论 -
AOP总结目录--- Spring源码从入门到精通(二十四)
总结:1、用@EnableAspectJAutoProxy注解开启aop功能。2、这个注解会给容器中注入一个组件AnnotationAwareAspectJAutoProxyCreate。3、此组件是一个后置处理器。4、容器的创建流程:1)、registerBeanPostProcessor注册后置处理器,创建AnnotationAwareAspectJAutoProxyCreate对象。2)、finishBeanFactoryInitialization()方法初始化剩下的单实例b原创 2021-07-12 19:22:42 · 147 阅读 · 0 评论 -
BeanFactoryPostProcessor--- Spring源码从入门到精通(二十七)
上篇文章主要介绍了事务的源码:事务有一个拦截器,先获取事务相关属性(相关属性可以在事务注解上面配置),之后再获取平台事务管理器PlatFormTransactionManager,最后执行目标方法,若正常,则获取到事务管理器,提交事务,若有异常,则获取到事务管理器,回滚此次方法。声明式事务源码解析--- Spring源码从入门到精通(二十六)这篇文章主要介绍beanFactoryPostProcessor源码:BeanPostProcessor:bean后置处理器,是在bean创建对象之后初原创 2021-07-15 16:24:44 · 161 阅读 · 0 评论 -
Bean生命周期(1)---Spring源码从入门到精通(七)
上篇文章主要介绍了FactoryBean接口,实现后,可以注入bean,在ioc容器中默认放的是getObject返回的bean:Spring源码从入门到精通---FactoryBean接口(六)这篇文章主要介绍Bean的生命周期,bean的生命周期指:bean的创建--->初始化--->销毁1、问?bean初始化的时候?单实例是在容器创建时bean初始化,调用construct。多实例实在获取实例的时候初始化。2、问?bean销毁的时候?单实例在容器关闭的时候销毁。原创 2021-06-28 20:19:56 · 143 阅读 · 1 评论 -
Ioc容器refresh总结(3)--- Spring源码从入门到精通(三十三)
上篇文章介绍了,调用bean工厂的后置处理器,主要分为两步:他是在beanFactory预准备标准初始化之后执行invokBeanFactoryPostProcessor;先调用beanDefinitionRegistryPostProcessor,在调用beanFactoryPostProcessor,里面都有借口优先级。Ioc容器refresh总结(2)--- Spring源码从入门到精通(三十二)六、registerBeanPostProcessor(beanFactory)注册b原创 2021-07-26 10:41:41 · 140 阅读 · 0 评论