Spring的工厂Bean是Spring的一种特殊Bean,这种工厂Bean必须实现FactoryBean接口。工具
FactoryBean接口是工厂Bean的标准接口,实现该接口的Bean一般只能做为工厂Bean使用。当咱们将工厂Bean部署在容器中,并经过getBean()方法来获取工厂Bean时,容器不会返回FactoryBean实例,而是返回FactoryBean的产品。spa
FactoryBean接口提供以下三个方法:代理
接口 | 描述 |
T getObject() | 实现该方法负责返回该工厂Bean生成的Java实例 |
Class<?> getObjectType() | 实现该方法返回该工厂Bean生成的Java实例的实现类 |
boolean isSingleton() | 实现该方法表示该工厂Bean生成的Java实例是否为单例模式接口 |
实现FactoryBean接口的Bean没法做为正常Bean使用。配置FactoryBean与配置普通Bean的定义没有区别,但当客户端对该Bean id请求时,容器返回该FactoryBean的产品,而不是返回该FactoryBean自己。事务
当咱们确实须要获取FactoryBean自己时,能够在Bean id前加&符号。ci
对于初学者而言,可能没法体会到工厂Bean的做用。实际上,FactoryBean是Spring中很是有用的一个接口。Spring内置提供了不少实用的工厂Bean,例如TransactionProxyFactoryBean,这个工厂Bean专门用于为目标Bean建立事务代理。部署
Spring提供的工厂Bean,大多用于生产一批具备某种特征的Bean实例,工厂Bean是Spring的一个重要工具类。get