Spring源码分析 BeanFactory与FactoryBean

Spring源码分析 BeanFactory与FactoryBean


BeanFactory源码如下

public interface BeanFactory
{

    public abstract Object getBean(String s)
        throws BeansException;

    public abstract Object getBean(String s, Class class1)
        throws BeansException;

    public abstract Object getBean(Class class1)
        throws BeansException;

    public transient abstract Object getBean(String s, Object aobj[])
        throws BeansException;

    public abstract boolean containsBean(String s);

    public abstract boolean isSingleton(String s)
        throws NoSuchBeanDefinitionException;

    public abstract boolean isPrototype(String s)
        throws NoSuchBeanDefinitionException;

    public abstract boolean isTypeMatch(String s, Class class1)
        throws NoSuchBeanDefinitionException;

    public abstract Class getType(String s)
        throws NoSuchBeanDefinitionException;

    public abstract String[] getAliases(String s);

    /*For example, if the bean named myJndiObject is a FactoryBean, 
    * getting &myJndiObject will return the factory, 
    * not the instance returned by the factory*/
    public static final String FACTORY_BEAN_PREFIX = "&";
}

源码分析如下:

  • FACTORY_BEAN_PREFIX 返回factorybean本身,而不是返回facotry工厂创建返回的实例
  • public abstract Object getBean(String s) 通过bean-id的名称获取实例,实例需要转换成对象,返回实例可能是共享的、单例模式下可以对实例的引用
  • T getBean(Class requiredType) jdk1.5后通过bean-id的名称和需转换对象,自动获取完匹配成传入的转换对象
  • public abstract boolean containsBean(String s) 判断工厂里面是否包含给定bean-id名称的实例
  • public abstract boolean isSingleton(String s) 判断bean-id名称是否是单例模式
  • public abstract String[] getAliases(String s) 返回bean-id名称给定的别名,bean对应有多个别名

FactoryBean 源码如下

public interface FactoryBean
{

    public abstract Object getObject()
        throws Exception;

    public abstract Class getObjectType();

    public abstract boolean isSingleton();
}

源码分析:

  • public abstract Object getObject() 从工厂中获取对象本身
  • public abstract Class getObjectType(); 从工厂中获取对象所属的class
  • public abstract boolean isSingleton(); 判断是否单例

总结:

BeanFactory:Spring的根容器,所有的子接口对应容器的一些处理原则和生命周期方法。spring整个层次体系中,BeanFactory处于最顶层,其它组建必须实现这个方法,常用ApplicationContext也是间接继承BeanFactory

FactoryBean:本身存在BeanFactory中,这个特殊的工厂用于创建由FactoryBean创建出来的对象,FactoryBean本身创建出来的对象不是本身,而是工厂创建出来的对象,在AOP中得到大量使用,主要用于装饰或代理,AOP本身也是通过动态字节码注入和代理生成

作者简介:张程 技术研究

更多文章请关注微信公众号:zachary分解狮 (frankly0423)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值