一 .概述
在之前我们通过工厂创建出了Bean对象,很显然,使用起来比较麻烦,这种做法只是兼容之前的习惯而已.
另外在spring之中,提供了一个特别的Bean,这种Bean存在的含义就是创建对象,spring使用FactoryBean来描述.
二 .FactoryBean
public interface FactoryBean<T> { T getObject() throws Exception; Class<?> getObjectType(); boolean isSingleton(); }
该接口定义了三个方法:
[1]获取对象
[2]获取对象的类型
[3]是否单例.
当我们配置了FactoryBean的时候,实际上是配置了一个该Bean生产的一个对象.
三 .演示
public class DateFactoryBean implements FactoryBean<Date> { //获取对象 @Override public Date getObject() throws Exception { return new Date(); } //获取对象的类型 @Override public Class<?> getObjectType() { return Date.class; } //获取Bean的作用域 @Override public boolean isSingleton() { return true; } }
配置文件:
<bean id="date" class="com.trek.factory.DateFactoryBean"></bean>
测试代码:
public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Date date = (Date) context.getBean("date"); System.out.println(date); }
我们发现,我们配置的Bean实际上是为了生产另外一个Bean而存在的.
四 .FactoryBean的作用
在spring之中,大量使用了FactoryBean.同时第三方的框架箱与spring集成的时候也使用了这个接口.
通过该接口,spring会知道创建的是什么Bean,什么类型,什么作用域.