
Spring源码学习
文章平均质量分 64
zzzzzyyyz
这个作者很懒,什么都没留下…
展开
-
invokeBeanFactoryPostProcessors
refresh里面的invokeBeanFactoryPostProcessors方法。这个方法干了什么呢?,执行所有实现了 BeanDefinitionRegistryPostProcessor接口的bd ,会执行所有实现了 BeanFactoryPostProcessor接口的bd。public interface BeanFactoryPostProcessor { /** * Modify the application context's internal bean factor原创 2021-05-29 23:31:03 · 222 阅读 · 0 评论 -
BeanDefinition
BeanDefinition是spring里面bean的一个建模对象,就相当于class对象是普通java对象的建模对象一样。可能在spring作用的各种业务场景中,class对象并不能完成spring对bean的抽象,所以弄了一个BeanDefinition作为bean的抽象建模对象。看看BD的UML类图的继承关系AttributeAccessor就是对Attribute的增删改查,Attribute是一个map<String,Object>,bd里的一个容器。这个map里面会原创 2021-05-29 23:29:26 · 219 阅读 · 0 评论 -
refresh的准备
@Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. //准备工作 比如对系统变量的校验等等 prepareRefresh(); // Tell the subclass to refresh the .原创 2021-05-23 16:24:27 · 189 阅读 · 0 评论 -
ClassPathBeanDefinitionScanner
上一篇AnnotatedBeanDefinitionReader中提到了ClassPathBeanDefinitionScanner,这两个都是AnnotationConfigApplicationContext中的属性,现在就看看这个ClassPathBeanDefinitionScanner在Spring上下文中干了啥 public AnnotationConfigApplicationContext() { this.reader = new AnnotatedBeanDefinitionR原创 2021-05-21 21:14:41 · 901 阅读 · 0 评论 -
AnnotatedBeanDefinitionReader
在AnnotationConfigApplicationContext可以实现基于Java的配置类加载spring的应用上下文,应该都蛮熟悉的,而在这个类里面,有两个特别重要的属性,就是这两个属性,在调用refresh()之前,帮这个类,干了很多的事情。这篇讲的就是其中一个属性AnnotatedBeanDefinitionReader这个类,下面就解析它是干嘛的 public AnnotationConfigApplicationContext() { this.reader = new An原创 2021-05-21 21:14:33 · 723 阅读 · 0 评论 -
clearMetadataCache解析
跟着代码看了前面几篇文章,现在再来看void clearMetadataCache();这个BeanFactoryPostProcessor的扩展点方法,就可以搞清楚它的意思了 public void clearMetadataCache() { //表示mergedbdmap当中的bd过期了 没有冻结 super.clearMetadataCache(); this.mergedBeanDefinitionHolders.clear(); clearByTypeCache原创 2021-05-20 20:44:22 · 360 阅读 · 0 评论 -
freezeConfiguration Spring冻结的解析
/** * 冻结所有bean定义,表示已注册的bean定义将不会被进一步修改或后处理。 * <p>This allows the factory to aggressively cache bean definition metadata. */ void freezeConfiguration(); @Override public void freezeConfiguration() { this.configurationFrozen = true; th..原创 2021-05-20 20:43:57 · 1008 阅读 · 0 评论 -
registerBeanDefinition
public interface BeanDefinitionRegistry extends AliasRegistry { /** * 在此注册表中注册一个新的bean定义。必须支持RootBeanDefinition和ChildBeanDefinition。 * @param beanName 要注册的bean实例的名称 * @param beanDefinition 要注册的bean实例的定义 *指定的bean名称,我们不允许覆盖它 * @see GenericBeanDe.原创 2021-05-19 23:15:31 · 2172 阅读 · 0 评论 -
mergedBeanDefinition
spring的生命周期里,其实并不只是在applicationContext上下文里get bd,就丢到单例池里,而是会进行一步mergeBeanDefinition操作,也就是合并BDBeanDefnition(BD)是没有mergedBeanDefinition这个类型,它只是进行了个合并为什么要合并beanDefinition,这是因为BD存在父子关系,这个可能是业务逻辑的需要吧,这个暂时不太明白哈。先debug看一段代码吧public class TestSpring { publi原创 2021-05-19 23:15:19 · 528 阅读 · 0 评论 -
clearByTypeCache方法深入解析
private void clearByTypeCache() { this.allBeanNamesByType.clear(); this.singletonBeanNamesByType.clear(); }看看clearByTypeCache()方法的代码,做的事情很简单,就是清楚这两个map,那么这两个map到底是啥玩意呢? /** Map of singleton and non-singleton bean names, keyed by dependency type..原创 2021-05-19 23:14:17 · 307 阅读 · 0 评论 -
BeanFactoryPostProcessor扩展类的API调用分析
BeanFactoryPostProcessor它是bean工厂的处理器,主要是提供给程序员扩展的;在spring容器运行期间可以让程序员对BeanFactory组件进行设置;这个咱们肯定都知道,BeanFactoryPostProcessor是Spring给程序员的个扩展点,而这个扩展点,是怎么扩展呢?可以看看这个接口@FunctionalInterfacepublic interface BeanFactoryPostProcessor { void postProcessB.原创 2021-05-18 00:05:09 · 135 阅读 · 0 评论 -
自定义注解
在Spring里面随处都可以看到各种各样的注解,所以再学习Spring源码之前,必须得搞定注解是什么,他们有什么用。所以咋们尝试自己写一个注解,也就是自定义注解package org.shadow.test;public @interface Zhou { public String value() default " "; public int age() default 2;}可以看看这个代码,也就是我们自定义的注解,接口那加个@就是了,然后下面自己定义注解里的参数。也就是我...原创 2021-05-17 15:28:52 · 233 阅读 · 0 评论