类名 | 实现接口 | 说明 |
---|---|---|
SimpleAliasRegistry | AliasRegistry | 别名注册缓存类 |
DefaultSingletonBeanRegistry | SingletonBeanRegistry | 单例bean注册缓存类 |
FactoryBeanRegistrySupport | FactoryBean注册缓存类 | |
AbstractBeanFactory | ConfigurableBeanFactory | 获取Bean, 是否单例, 是否原型, bean别名, bean类型 |
AbstractAutowireCapableBeanFactory | AutowireCapableBeanFactory | 通过BeanDefinition, 创建bean, 填充属性, 实例化Bean |
DefaultListableBeanFactory | ConfigurableListableBeanFactory, BeanDefinitionRegistry | bean定义注册, 获取bean定义, 对所有的bean初始化 |
SimpleAliasRegistry 别名注册缓存类
//别名储存(key 别名, value beanId)
private final Map<String, String> aliasMap = new ConcurrentHashMap<>(16);
// 注册 别名为key, id为value
void registerAlias(String name, String alias);
DefaultSingletonBeanRegistry 单例bean注册缓存类
//一级缓存 (Key id, Value 已注册单例对象)
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);
//三级缓存 (Key Id, Value 对象工厂)
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);
//二级缓存 (K id, Value 提前注册对象)
private final Map<String, Object> earlySingletonObjects = new HashMap<>(16); //二级缓存
//注册 id为key, 对象为 value
registerSingleton(String beanName, Object singletonObject);
void addSingleton(String beanName, Object singletonObject);
FactoryBeanRegistrySupport 工厂Bean注册缓存类
// factoryBean注册缓存
private final Map<String, Object> factoryBeanObjectCache = new ConcurrentHashMap<>(16);
// 获取对象为了Bean实例 (只要bean不为FactoryBean 就不会做任何处理直接返回)
protected Object getObjectForBeanInstance(Object beanInstance, String name, String beanName, @Nullable RootBeanDefinition mbd);
AbstractAutowireCapableBeanFactory 创建Bean,填充属性, 初始化Bean
//创建bean
Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args);
//创建bean
Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args);
//创建BeanWrapper
BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args);
//创建BeanWrapper及初始化bean (Cglib)
BeanWrapper instantiateBean(final String beanName, final RootBeanDefinition mbd)
//填充属性
void populateBean(String beanName, RootBeanDefinition mbd, @Nullable BeanWrapper bw)