Spring ioc 容器BeanFactory介绍

类名 实现接口 说明
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)

猜你喜欢

转载自blog.csdn.net/baidu_36327010/article/details/87910326