spring源码学习二:FactoryBean的使用

FactoryBean接口分析和使用

一下内容大都来自《spring源码深度解析》一书,感兴趣的可以买书支持一下作者!

1 概述

1 FactoryBean存在的意义:
某些时候,spring实例化bean的过程可能会比较复杂,而此时若直接使用spring反射机制实例化bean,则需要在bean中提供大量的配置信息,导致配置灵活性受限。采用编码方式可以解决这个问题,故而spring提供了一个FactoryBean的工厂类接口。

2 简述
FactoryBean对于spring来说占有重要的地位,spring自身就提供了70多种FactoryBean的实现。它们隐藏了实例化bean时的复杂细节,为上层的应用带来了便利。且spring的FactoryBean支持泛型。

2 接口分析

FactoryBean的接口源码如下所示:

public interface FactoryBean<T> {
    T getObject() throws Exception;

    Class<?> getObjectType();

    boolean isSingleton();
}

三个方法的作用分别为:

1 T getObject() throws Exception;

返回由FactoryBean创建的bean实例,如果isSingleton为true,则该实例会被放进spring容器中单实例缓存池中;

2 Class<?> getObjectType();

返回FactoryBean创建的bean的类型;

3 boolean isSingleton();

判断由FactoryBean创建的bean实例是singleton还是prototype;

3 使用

当直接调用getBean方法,方法的参数为一个FactoryBean实现类时,返回的不是这个FactoryBean本身,而是FactoryBean#getObject()方法所返回的对象。

当然,若想要获得实现了FactoryBean的类本身,spring也提供了方法。即在调用getBean方法时,在该类对应的beanName前加"&",例如getBean("&customClass");

上一篇:Spring中BeanFactory和FactoryBean区别


下一篇:Spring学习笔记--高级特性之FactoryBean