BeanFactory源码体系解析--DefaultListableBeanFactory四

 DeafultListableBeanFactory 是可以独立使用的BeanFactory接口实现类,默认继承了AbstractAutowireCapableBeanFactory
,实现了ListableBeanFactory和BeanDefinitionRegistry接口
即可以作为单独的BeanFacory容器,也可以作为自定义BeanFactory的父类。
1、DefaultListableBeanFactory的作用
  Spring容器加载时,常见的应用是访问Bean前,需要注册所有的BeanDefinition。使用预先创建的Bean定义元
  数据对象,从本地的BeanDefinition表中查询BeanDefinition因而不会花费太多成本。
2、DefaultListableBeanFactory实现的接口作用
AliasRegistry:制定别名的管理规则,定义了对alias的简单增删改等操作。
SimpleAlliasRegistry:用map作为alias的缓存,并对接口AliasRegistry进行实现。
SingletonBeanRegistry:定义对单例的注册以及获取。
DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry各函数的实现。
FactoryBeanRegistrySupport:在DefaultSingletonBeanRegistry基础上增加了对FactoryBean的特殊处理功能。
DefaultListableBeanFactory 综合了接口的所有功能,主要负责了Bean注册后的处理逻辑。
3、属性字段
    // Java依赖注入标准 JSR-330 支持。
    private static Class<?> javaxInjectProviderClass;
    // DefaultListableBeanFactory引用的缓存
    private static final Map<String, Reference<DefaultListableBeanFactory>> serializableFactories = new ConcurrentHashMap<>(8);
    // 序列号id
    private String serializationId;
    // 是否允许用相同的名称重新注册不同的定义
    private boolean allowBeanDefinitionOverriding = true;
    // 是否允许懒加载
    private boolean allowEagerClassLoading = true;
    // 依赖排序顺序
    private Comparator<Object> dependencyComparator;
    // 解析器,用于检查bean定义是否为自动装配候选
    private AutowireCandidateResolver autowireCandidateResolver = new SimpleAutowireCandidateResolver();
    // 依赖类型和自动注入值的映射
    private final Map<Class<?>, Object> resolvableDependencies = new ConcurrentHashMap<>(16);
    // BeanDefinition和beanName的映射
    private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
    // 依赖类型和单例、非单例bean的映射
    private final Map<Class<?>, String[]> allBeanNamesByType = new ConcurrentHashMap<>(64);
    // 依赖类型和单例bean的映射
    private final Map<Class<?>, String[]> singletonBeanNamesByType = new ConcurrentHashMap<>(64);
    // bean定义名称列表,按注册顺序排列。
    private volatile List<String> beanDefinitionNames = new ArrayList<>(256);
    // 手动注册的单例,按注册顺序排列
    private volatile Set<String> manualSingletonNames = new LinkedHashSet<>(16);
    // 固定配置的缓存的bean定义名数组
    private volatile String[] frozenBeanDefinitionNames;
    // 是否可以缓存所有bean的bean定义元数据
    private volatile boolean configurationFrozen = false;
4、主要方法
    copyConfigurationFrom(ConfigurableBeanFactory otherFactory) 复制其他配置信息
    getBean() 获取bean
    getBeanProvider 获取bean的提供者
    resolveBean  
      如果父类是DefaultListableBeanFactory,调用父类的resolveBean方法
      如果父类不是DefaultListableBeanFactory,且不为空,获取父类的bean的提供者,
         如果有参数,调用有参构造
         无参构造,getIfAvailable:实际存在才返回一个实例,*   getIfUnique: 有多个实例时,返回默认的实例(比如primary)
      
    getBeanNamesForTypedStream 通过ResolvableType获取bean名称
    containsBeanDefinition 检查此Bean工厂是否包含指定名称的Bean定义信息,不考虑工厂可能参与的任何层级
    getBeanDefinitionCount 获取Bean定义的个数
    getBeanNamesForType 根据Bean定义或FactoryBean中getObjectType的值判断,返回给定类型匹配的Bean名称
    requiresEagerInitForType 是否马上返回bean以确定类型
    getBeansOfType 获取bean名称和实例的映射
    getBeanNamesForAnnotation 根据注解获取bean的名称
    findAnnotationOnBean 根据beanName获取注解
    registerResolvableDependency 注册依赖类型,自动注入值
    isAutowireCandidate 指定的bean是否是自动注入的候选
    getBeanDefinition 从beanDefinitionMap找bean的定义
    getBeanNamesIterator 获取bean的迭代名称,包括自定的和手动注册的
    freezeConfiguration 冻结当前的bean的信息
    isBeanEligibleForMetadataCaching 是否已经冻结了或者是否已创建
    preInstantiateSingletons 确保实例化了所有非lazy-init单例
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值