重学spring(三) Spring IOC 源码分析--获取单例Bean
简介上一篇文章演演示了Bean的生命周期,我们从容器中获取bean使用一般是 ctx.getBean("xxx"),但这个这个方法具体做了哪些事情我们并不知道,在这篇文章我将详细分析getBean("xxx")方法实现细节,代码比较长,分析不到位的地方,请见谅。 源码分析入口getBean(String)源码ctx.getBean("xxx") 调用了BeanFactory 接口的getBean(String name)方法,这里只分析getBean的主逻辑,其调用的方法放在后面分析。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911...
重学spring(二) Spring中Bean的生命周期
Bean生命周期上篇文章讲了Bean的四种实例化的四种方式。在传统应用这Bean的生命周期很简单,使用new关键字进行Bean的实例化,不再使用则由GC进行回收,相比之下,Spring管理Bean的生命周期则比较复杂。 如下图: 该图描述了singleton类型Bean的实例化过程 Spring对Bean进行实例化; Spring将值和对Bean的引用注入进Bean对应的属性中; 如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()接口方法; 如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()接口方法,将BeanFactory容器实例传入; 如果Bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()接口方法,将应用上下文的引用传入; 如果Bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitialization()接口方法;...
重学spring(一) Spring中Bean实例化的四种方式
从工作开始到现在一直都有使用Spring,日常开发中总有spring的身影,但实话实讲,对spring的认识一直停留在使用阶段,只知其然。做技术当然不能这样,柄着知其所以然的态度,想系统的学习分析一下spring,无奈懒惰让我一直没有着手做。不积跬步,无以至千里,万事得开个头,终于下定决定写下第一篇。 tip: 本系列根据spring 5.2.6.RELEASE 进行分析。 引入spring依赖 123456789101112<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.2.6.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId&...




