Spring IOC-BeanFactory的继承体系结构

本文主要介绍BeanFactory以及它的各种继承层级的接口、抽象类及实现类,因为内容很多,所以这里不介绍ApplicationContext继承体系下的类(虽然ApplicationContext本质上也是BeanFactory,但是毕竟这这是我们平时接触最多的两种类别,所以分开说)。
关于ApplicationContext继承体系结构在《Spring IOC-ApplicationContext的继承体系结构》一文分享说明。
BeanFactory其实就是Spring的IOC容器,当然了Spring为我们准备了许多种IOC容器来使用,这样可以方便我们从不同的层面,不同的资源位置,不同的形式的定义信息来建立我们需要的IoC容器。
在鄙人博客的不同的博文中其实都提到了Spring的一个设计理念,就是接口-抽象类-实现类的体系结构,这里多说几句为什么这么设计,熟悉设计模式的人都知道,这样的目的是为了提高软件的可维护性、可扩展性、强复用性。说的文雅一点就是使代码满足“对修改关闭、对扩展开放”、“里氏代换”原则 、“依赖倒转”原则、“接口隔离”原则、“合成\聚合复用”原则。如果项了解这几个原则可以百度下,这里不详细介绍。
废话不多说,直接上代码来看下BeanFactory的继承道理多屌。
先贴张图,大家大致看下知道下面介绍的类大概在继承体系的哪个位置。
在这里插入图片描述
首先看BeanFactory接口中定义的方法:

public interface BeanFactory {
   
    //这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象
    String FACTORY_BEAN_PREFIX = "&";
    //这里根据bean的名字,在IOC容器中得到bean实例,这个IOC容器就是一个大的抽象工厂。 
    Object getBean(String name) throws BeansException;
    //这里根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果根据名字取得的bean实例的Class类型和需要的不同的话。
    <T> T getBean(String name, Class<T> requiredType);
    <T> T getBean(Class<T> requiredType) throws BeansException;
    Object getBean(String name, Object... args) throws BeansException;
    //这里提供对bean的检索,看看是否在IOC容器有这个名字的bean
    boolean containsBean(String name);
    //这里根据bean名字得到bean实例,并同时判断这个bean是不是单件 
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
    //这里根据bean名字得到bean实例,并同时判断这个bean是不是原型 
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
    //这里对得到bean实例的Class类型  
    Class<?> getType(String name) throws NoSuchBeanDefinitionException;
    //这里得到bean的别名,如果根据别名检索,那么其原名也会被检索出来  
    String[] getAliases(String name);

然后在看BeanFactory 的直接继承接口(二级接口),有HierarchicalBeanFactory、AutowireCapableBeanFactory和ListableBeanFactory看这三个类代码:

HierarchicalBeanFactory
作用:是为了实现bean工厂的层级关系提供支持,其中声明两个方法:

//得到父工厂
BeanFactory getParentBeanFactory();
//在本地工厂中有没有给定名称的bean,不包括继承的工厂
boolean containsLocalBean(String name);

AutowireCapableBeanFactory
作用:提供自动装配bean能力的功能支持,声明方法如下:(这个接口中所有声明的方法都是在默认的实现实在AbstractAutowireCapableBeanFactory类中默认实现)

//用个给定的class类型制造一个完整的bean
<T> T createBean(Class<T> beanClass) throws BeansException;
//bean初始化完成之后执行回调函数和后处理器,
void autowireBean(Object existingBean) throws BeansException;
// 自动注入和设置bean的属性、执行factory回调函数比如setBeanName和setBeanFactory和执行bean的所有的后处理器
Object configureBean(Object existingBean, String beanName) throws BeansException;
//调用bean的init方法,这个方法是客户配置的,在bean实例化之后调用
Object initializeBean(Object existingBean, String beanName) throws BeansException;
//初始化完成之后应用后处理器
Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)
//应用前处理器
Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName);

ListableBeanFactory
作用:可以枚举所有的bean实例,是为了使客户端访问工厂中的bean而设计的,主要方法(这些方法顾名思义,所有的方法实现在StaticListableBeanFactory、AbstractApplicationContext和DefaultListableBeanFactory中):

//是否含有给定的名称的bean
boolean 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值