7 spring之FactoryBean
FactoryBean从名字来看以bean结尾那应该就是一个bean吧,没错它确实是一个bean,不同于普通Bean的是:它是实现了FactoryBean<T>接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的
对象,而不是FactoryBean本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取
7.1. FactoryBean使用演示
首先咱们一起来看下FactoryBean的源代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public interface FactoryBean<T> {
T getObject() throws Exception;
Class<?> getObjectType();
boolean isSingleton(); }
|
下面我们通过FactoryBean来创建一个图形Circular的bean,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public class MyFactoryBean implements FactoryBean<Circular>{ public Circular getObject() throws Exception { return new Circular(); } public Class<?> getObjectType() { return Circular.class; }
public boolean isSingleton() { return true; } }
|
再在MainConfig主配置中增加一个bean如下:
1 2 3 4
| @Bean public MyFactoryBean getMyFactoryBean(){ return new MyFactoryBean(); }
|
测试代码如下:
1 2 3 4 5 6 7 8
| @Test public void testFactoryBean() { AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(MainConfig.class); Object object = applicationContext2.getBean("getMyFactoryBean"); System.out.println("实例bean为 === "+object); Object object2 = applicationContext2.getBean("&getMyFactoryBean"); System.out.println("实例bean为 === "+object2); }
|
本文大部分转自:
51CTO博客-知了123