Spring源码
文章平均质量分 92
奔跑的蜗牛_Kieasar
不要在奋斗的年纪选择安逸
展开
-
Spring源码之AOP(四)——ScopedProxy
我们看一段代码,先定义一个多例的Bean:@Component@Scope(value = DefaultListableBeanFactory.SCOPE_PROTOTYPE)public class ScopedProxyBean { public void code() { System.out.println(this.hashCode()); }}再定义一个单例Bean,通过@Autowired注解把上面的多例...原创 2022-04-28 15:12:33 · 664 阅读 · 0 评论 -
Spring源码之@Lookup注解解析
众所周知,Spring中的Bean默认都是单例的,如果想要每次返回的不一样,类上加@Scope注解,并指定scope属性为PROTOTYPE类型的时候,在每次注入的时候会自动创建一个新的bean实例。看一下这个例子:/** * @ClassName: LookupService * @Description: 测试原型Bean的注入 * @Author: Kaisheng Du * @Date: 2021/10/25 14:34 * @Version: 1.0 */@C...原创 2022-01-06 09:04:04 · 1925 阅读 · 0 评论 -
Spring源码之启动过程(三)—— registerBeanPostProcessors()解析
主要是针对实现BeanPostProcessor接口的类调用和实例化过程,会提前实例化,BeanPostProcessor接口类型实例是针对某种特定功能的埋点,在这个点会根据接口类型来过滤掉不关注这个点的其他类,只有真正关注的类才会在这个点进行相应的功能实现。 会把实现了BeanPostProcessor接口的类实例化并排序,并且加入到BeanFactory的beanPostProcessor属性中: protected void registerBeanPostPro...原创 2021-11-18 13:34:35 · 329 阅读 · 0 评论 -
Spring源码之启动过程(五)—— @Resource、PostConstruct、@PreDestroy注解解析
在上一章()Bean的实例化过程中,着重看了@Autowired注解的解析,及依赖注入过程,本节,我们看一下@Resource、PostConstruct、@PreDestroy注解的解析。是由CommonAnnotationBeanPostProcessor负责,该类实现InstantiationAwareBeanPostProcessor。目录1. 收集@PostConstruct 、@PreDestroy 注解2. 收集@Resource 注解我们先回顾...原创 2021-12-16 14:58:23 · 685 阅读 · 0 评论 -
Spring事务(三)——传播属性之REQUIRED
事务是与连接对象紧密相关的,事务属性用来控制事务流转。Spring事务的传播属性有以下几种:PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,则加入到这个事务中。默认属性,也是最常使用。 PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在...原创 2023-01-06 09:24:10 · 3129 阅读 · 0 评论 -
Spring事务(二)——事务的提交
前世:JDK如何控制事务判断是否在同一个事务的标准就是多个DML是否为同一个连接对象Mysql的事务的提交方式默认为自动提交,如果有多个DML操作,每一个执行结束都会自动提交,所以要想多个DML操作在一个事务,必须将自动提交关闭(前提)。开启事务执行被代理方法关闭事务今生:Spring事务首先Spring的事务也是运用了AOP的思想,我们知道,要实现AOP功能,必须有代理的入口类,那就是在类上加@EnableTransactionManagement注解,表示...原创 2022-10-29 09:34:27 · 4082 阅读 · 0 评论 -
Spring源码之AOP(三)——代理的提前生成
代理的提前生成是在实例化的过程中,进入创建Bean的方法createBean() 所属类:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreati...原创 2022-03-30 15:43:39 · 461 阅读 · 0 评论 -
Spring源码之整合Mybatis底层实现
目录1. Spring整合Mybatis底层源码2.SqlSessionTemplate类的作用3. Mybatis一级缓存失效问题1. Spring整合Mybatis底层源码Mybatis框架可以单独使用,需要用到Mybatis所提供的一些类构造出对应的Mapper对象,然后就能使用Mybatis框架提供的功能,我们先看一个Demo: @Test public void testMybatis() throws IOException { //...原创 2022-05-28 17:57:08 · 636 阅读 · 0 评论 -
Spring源码之ConfigurationClassPostProcessor类解读
对@Component、@ComponentScan、@Import、@ImportSource注解的判断在isConfigurationCandidate()方法中:所属类:org.springframework.context.annotation.ConfigurationClassUtils public static boolean isConfigurationCandidate(AnnotationMetadata metadata) { // Do not ...原创 2021-12-25 12:35:01 · 670 阅读 · 0 评论 -
Spring源码之启动过程(二)—— invokeBeanFactoryPostProcessors()方法解析
Spring在启动的时候,在实例化之前会往AbstractBeanFactory中的beanPostProcessors属性(一个List)中放置各种类型的BeanPostProcessor对象,执行的过程中会往Bean工厂中放置BeanDefinition。BeanFactoryPostProcessor是BeanFactory的后置处理器protected void invokeBeanFactoryPostProcessors(ConfigurableListableBean...原创 2021-11-09 08:32:21 · 396 阅读 · 0 评论 -
Spring源码之启动过程(一)—— 容器的启动
registerAnnotationConfigProcessors()方法所属类:org.springframework.context.annotation.AnnotationConfigUtils public static Set<BeanDefinitionHolder> registerAnnotationConfigProcessors( BeanDefinitionRegistry registry, @Nullable Object source) {..原创 2021-10-31 19:02:11 · 1229 阅读 · 0 评论 -
Spring源码之循环依赖
1. 单例循环依赖(支持)通常来说,如果问Spring内部如何解决循环依赖,一定是默认的单例Bean中,属性互相引用的场景。比如几个Bean之间的互相引用:原创 2022-01-17 13:45:57 · 357 阅读 · 0 评论 -
Spring事务(一)——切面的创建
在Bean的初始化过程中,会经过InfrastructureAdvisorAutoProxyCreator类的初始化及后面的方法,会判断当前当前Bean对象是否和BeanFactoryTransactionAttributeSourceAdvisor匹配,匹配逻辑为判断该Bean的类上是否存在@Transactional注解,或者类中的某个方法上是否存在@Transactional注解,如果存在则表示该Bean需要进行动态代理产生一个代理对象作为Bean对象。 当该代理对象在...原创 2022-10-03 09:27:35 · 1050 阅读 · 0 评论 -
Spring源码之启动过程(四)—— Bean的实例化详解
前面,我们把Bean的生命周期做了一个概述和梳理,为的是更深刻的理解容器启动及Bean的生命周期,最主要的是Bean的实例化过程,没有看过的,可以进去先看一下(文章链接:),也有助于理解本文内容,下面,直入主题:目录1. finishBeanFactoryInitialization()2. preInstantiateSingletons()3. getBean()4. doGetBean()5. 第一个getSingleton()6. 第二个getSingle...原创 2021-12-07 09:07:34 · 872 阅读 · 0 评论 -
Spring源码之AOP(二)——代理的生成和链式调用
上文(链接地址:)我们详细讲到了找根据Advice和Pointcu找切面(Adviosr)的过程,现在,切面找到了,进入本章的主题,生成代理。原创 2022-02-23 16:02:54 · 531 阅读 · 0 评论 -
Spring源码之Bean的生命周期
Spring已经成为了目前最流行的第三方开源框架之一,在我们充分享受Spring IOC容器带来的便捷时,也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的,我们一起来讨论一下Spring中Bean的生命周期。Spring容器就好像生产车间的流水线,创建出来的对象就像是生产出来的一个个精美绝伦的产品。Spring将管理的对象称之为Bean。Spring最重要的功能就是帮助程序员创建对象(也就是IOC),而启动Spring就是为创建...原创 2021-10-17 15:21:32 · 430 阅读 · 1 评论 -
Spring源码之AOP(一)——切面的生成
是在被代理对象创建完成(实例化)之后才会生成代理对象Bean的实例化之后,进入doCreateBean方法org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactoryprotected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreationExce原创 2022-02-08 13:47:47 · 536 阅读 · 0 评论 -
Spring源码之事件管理与发布
在AbstractApplicationContext.refresh() 方法中,初始化了一个事件管理类(或事件管理器)。// Initialize event multicaster for this context.// TODO 初始化事件管理类,在单例池中创建了一个SimpleApplicationEventMulticaster类initApplicationEventMulticaster();进入 initApplicationEventMulticaster(...原创 2021-10-09 14:55:36 · 181 阅读 · 0 评论 -
Bean实例化之XML标签解析
在Spring中,我们经常会通过以下几种方式来定义Bean:1.<bean/>2.@Bean3.@Component(@Service,@Controller)现在,我们使用第二种和第三种方式较多,要实例化某个类,直接加上@Component注解就可以了,但是在Spring早期的版本都是通过XML配置文件来定义Bean,这是我们的传统手艺,理解了配置文件的解析有助于后面Spring源码的学习。 ...原创 2021-10-08 18:58:02 · 598 阅读 · 0 评论 -
Spring源码前置知识
1. Spring 容器加载方式:1.1 通过配置文件加载: ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml"); 1.2 通过配置文件的绝对路径加载: ApplicationContext applicationContext = new FileSystemXmlApplicationContext("E:\\idea\\springdemo\\spring.xm原创 2021-09-17 16:29:05 · 217 阅读 · 0 评论 -
@Configration和@Compnent注解区别
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言在Spring Boot中基本是@Configration注解使用较多,例如,配置类的启动加载,和@Component注解都是为了实例化,Spring为什么要这样设计?一、案例用一个例子来予以说明,在下面的代码中,Spring启动中lison() 方法会被调用两次,但是同一个实例吗?先用@Componen.原创 2021-09-07 15:20:40 · 616 阅读 · 0 评论