Spring系列文章首发:简单聊聊BeanFactory继承体系 缓存
Spring 配置文件中每个节点元素在 Spring 容器里都经过一个 BeanDefinition 对象表示,它描述了 Bean 的配置信息。而 BeanDefinitionRegistry 接口提供了向容器手工注册BeanDefinition 对象的方法。编辑器
位于类结构树的顶端 ,它最主要的方法就是 getBean(String beanName),该方法从容器中返回特定名称的 Bean,BeanFactory 的功能经过其余的接口获得不断扩展。cdn
该接口定义了访问容器中 Bean 基本信息的若干方法,如查看 Bean 的个数、获取某一类型Bean 的配置名、查看容器中是否包括某一 Bean 等方法。对象
父子级联 IoC 容器的接口,子容器能够经过接口方法访问父容器; 经过HierarchicalBeanFactory 接口, Spring 的 IoC 容器能够创建父子层级关联的容器体系,子容器能够访问父容器中的 Bean,但父容器不能访问子容器的 Bean。Spring 使用父子容器实现了不少功能,好比在 Spring MVC 中,展示层 Bean 位于一个子容器中,而业务层和持久层的 Bean 位于父容器中。这样,展示层 Bean 就能够引用业务层和持久层的 Bean,而业务层和持久层的 Bean 则看不到展示层的 Bean。blog
是一个重要的接口,加强了 IoC 容器的可定制性,它定义了设置类装载器、属性编辑器、容器初始化后置处理器等方法。继承
定义了将容器中的 Bean 按某种规则(如按名字匹配、按类型匹配等)进行自动装配的方法。接口
定义了容许在运行期间向容器注册单实例 Bean 的方法;对于单实例( singleton)的 Bean 来讲,BeanFactory 会缓存 Bean 实例,因此第二次使用 getBean() 获取 Bean 时将直接从IoC 容器的缓存中获取 Bean 实例。Spring 在 DefaultSingletonBeanRegistry 类中提供了一个用于缓存单实例 Bean 的缓存器,它是一个用 HashMap 实现的缓存器,单实例的 Bean 以beanName 为键保存在这个 HashMap 中。get