用到的类和类的职责
接口 BeanFactory
定义 Bean 工厂接口
方法 getBean(String Name)
BeanDefinition
定义 Bean 实例信息
接口 SingletonBeanRegistry
单例 Bean 注册表
方法 getSingleton(String beanName)
DefaultSingletonBeanRegistry
通用的注册表实现
属性
singletonObjects: Map<String, Object>
实现方法
getSingleton(String beanName)
自己的方法
addSingleton(String beanName, Object singletonObject)
抽象类 AbstractBeanFactory
实现BeanFactory 继承DefaultSingletonBeanRegistry
抽象的 Bean 工厂基类,定义模板方法
实现方法
getBean 实现BeanFactory的方法
自己的抽象方法
getBeanDefinition(String beanName)
createBean(String beanName, BeanDefinition beanDefinition)
AbstractAutowireCapableBeanFactory
继承AbstractBeanFactory
实现默认bean创建的抽象bean工厂超类
重写的方法
createBean(String beanName, BeanDefinition beanDefinition)
接口 BeanDefinitionRegistry
Bean 定义注册接口
方法
registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
核心实现类 DefaultListableBeanFactory
继承AbstractAutowireCapableBeanFactory实现BeanDefinitionRegistry
默认的Bean工厂实现类
属性
beanDefinitionMap : Map<String, BeanDefinition>
实现方法
registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
重写方法
getBeanDefinition(String beanName)
开始做spring,实现Bean对象的的定义、注册、和获取
Bean对象的定义
BeanDefinition定义 Bean 实例信息
public class BeanDefinition {
private Class beanClass;
public BeanDefinition(Class beanClass) {
this.beanClass = beanClass;
}
public Class getBeanClass() {
return beanClass;
}
public void setBeanClass(Class beanClass) {
this.beanClass = beanClass;
}
}
基于工厂模式,我们先创建出BeanFactory接口,getBean()方法用于获取实例化Bean
BeanFactory
public interface BeanFactory {
/**
* 返回 Bean 的实例对象
* @param name 要检索的bean的名称
* @return 实例化的 Bean 对象
* @throws BeansException 不能获取 Bean 对象,则抛出异常
*/
Object getBean(String name) throws BeansException;
}
因为要实现单例模式
创建一个单例 Bean 注册表SingletonBeanRegistry接口
public interface SingletonBeanRegistry {
/**
* 返回在给定名称下注册的(原始