Spring
文章平均质量分 65
JayLaiSCUT
从事大数据平台和后端开发工作,热爱IT新技术,热爱开源
展开
-
Spring5 IOC源码解读系列13—createBean方法
一 概述createBean顾名思义是创建bean对象的实例,但是实际干活还是调用doCreateBean去实例化对象。如果对应的bean是单例的,则会被添加到一级缓存中,并将二三级缓存的数据删除。这里有个两个重要的概念,一个是循环依赖,说简单点就是两个Bean存在相互引用的情况,在Sspring中当且仅当Bean的类型为单例且属性注入存在对其他Bean的引用的情况下,Spring通过三级缓存解决了循环依赖问题,其他场景(Bean非单例,构造函数存在对其他Bean的依赖等)都会抛出异常!另外一个就是B原创 2021-07-03 14:32:33 · 3138 阅读 · 1 评论 -
Spring5 IOC源码解读系列12—getBean方法
一 概述getBean方法从缓存中获取Bean对象得实例,如果获取不到,则触发Bean对象的创建方法createBean。Bean根据作用域划有很多种,日常主要打交道的还是单例的比较多,本篇主要详细讲解单例bean的创建,其他的不做展开。二 源码2.1 getBeanpublic Object getBean(String name) throws BeansException { //do开头方法才是实际干活 return doGetBean(name, null, null, fals原创 2021-06-28 21:01:09 · 3383 阅读 · 0 评论 -
Spring5 IOC源码解读系列11—isFactoryBean方法
一概述FactoryBean是一个接口,通过它可以达到自定义bean的实例化过程的目标,为Spring容器中Bean的实现提供了更加灵活的方式。说简单的,我们编写一个FactoryBean实现类并将其注入到Spring容器中,可以在接口抽线方法getObject的实现方法中完成特定业务的Bean的实例化。二应用2.1 创建POJOpublic class Person { private String name; public Person() { Syst原创 2021-06-24 19:04:23 · 3591 阅读 · 0 评论 -
Spring5 IOC源码解读系列10—finishBeanFactoryInitialization方法
一 概述finishBeanFactoryInitialization方法是Spring刷新/refresh方法中最核心。这个方法的主要作用是完成非抽象,单例,非懒加载的Bean的实例化。鉴于这个方法太复杂,我把其中部分方法拆出来单独写出博客,详见《Spring5 IOC源码解读系列》后续文章。二 源码2.1 finishBeanFactoryInitialization方法protected void finishBeanFactoryInitialization(ConfigurableLis原创 2021-06-24 19:01:04 · 3457 阅读 · 0 评论 -
Spring5 IOC源码解读系列9—registerListeners方法
一 概述Spring的事件监听主要涉及三个角色:1)事件:ApplicationEvent抽象类的继承者;2)事件发布者:事件多播器ApplicationEventMulticaster接口的实现类,比如SimpleApplicationEventMulticaster;3)事件监听器:ApplicationListener 接口的实现类。registerListeners方法主要将实现监听器接口(即ApplicationListener接口)的bean们注册到多播器中,即存储到application原创 2021-06-20 17:44:21 · 3822 阅读 · 0 评论 -
Spring5 IOC源码解读系列8—initApplicationEventMulticaster方法
一 概述initApplicationEventMulticaster主要用于为当前上下文初始化事件多播器。二 源码2.1 initApplicationEventMulticaster方法protected void initApplicationEventMulticaster() { //获取Bean工厂 ConfigurableListableBeanFactory beanFactory = getBeanFactory(); //判断beanF原创 2021-06-19 23:34:32 · 3609 阅读 · 0 评论 -
Spring5 IOC源码解读系列7—initMessageSource方法
1 概述initMessageSource主要用于国际化,说简单点就是不同语言之间的翻译2 应用2.1 添加Bean在Spring的配置文件中名称为messageSource(名称不能错,否则读取失效!)的Bean<bean id="messageSource"class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="bas原创 2021-06-19 18:04:34 · 3951 阅读 · 0 评论 -
Spring5 IOC源码解读系列6—registerBeanPostProcessors方法
一 概述BeanPostProcessor接口是Spring留给用户,用于bean的拓展。在Spring Bean的生命周期中,BeanPostProcessor接口实现类XX的postProcessBeforeInitialization方法执行时间早于Spring Bean实例化,称为前置处理器;XX的postProcessAfterInitialization方法的执行时间晚于Spring Bean实例化,称为后置处理器。registerBeanPostProcessors方法的主要作用是实例化并原创 2021-06-16 18:42:21 · 3778 阅读 · 0 评论 -
Spring5 IOC源码解读系列3—prepareBeanFactory方法
一 概述prepareBeanFactory方法的主要作用是配置工厂的标准上下文特征,如上下文的类加载器和后处理器。二 源码2.1 prepareBeanFactoryprotected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { // Tell the internal bean factory to use the context's class loader etc. //设置原创 2021-06-15 23:37:15 · 3940 阅读 · 0 评论 -
Spring5 IOC源码解读系列2—obtainFreshBeanFactory方法
一 概述obtainFreshBeanFactory主要刚了两件大事:1)干掉旧的BeanFactory,生成新的BeanFactory 2)加载Spring配置文件转换为BeanDefinition,并注册到beanDefinitionMap中。第2件事的BeanDefinition加载流程说详细点就是:1)Resource定位,即在Resource类中封装配置文件的路径和对应类加载器 2)将定义的配置文件转换为BeanDefinition 3)执行BeanDefinitionReaderUtils原创 2021-06-15 23:32:58 · 4626 阅读 · 1 评论 -
Spring5 IOC源码解读系列1—prepareRefresh方法
一 概述prepareRefresh是抽象类AbstractApplicationContext中的方法,主要干了刷新前的准备工作,比如设置上下文的属性,配置文件的校验等。如果开启debug模式,执行完prepareRefresh后会打印日志DEBUG org.springframework.context.support.ClassPathXmlApplicationContext -Refreshing org.springframework.context.support.ClassPathXm原创 2021-06-15 23:30:20 · 4913 阅读 · 2 评论 -
Spring5 IOC源码解读系列5—invokeBeanFactoryPostProcessors方法
一 概述invokeBeanFactoryPostProcessor主要作用是实例化已经在容器中注册过的BeanFactoryPostProcessor接口的实现类,回调postProcessBeanFactory方法等。invokeBeanFactoryPostProcessor源码调用链又长又复杂,容易把人绕晕,因此本文主要围绕着先使用,再研究源码顺序,逐步段解析,从易到难。二 BeanFactoryPostProcessor接口及其应用BeanFactory 后置处理器BeanFactory原创 2021-06-15 23:27:38 · 5101 阅读 · 3 评论