使用FactoryBean注入Bean

代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18

public class MyFactoryBean implements FactoryBean {
    @Override
    public Object getObject() throws Exception {
        return null;
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }
}

getObject:方法返回了用户创建的实例
getObjectType:指明了创建的实例的类型
isSingleton:指明了创建的实例是否是单例

具体使用时将FactoryBean注入到Spring上下文即可。注入后,通过id获取该FactoryBean得到的并不是该FactoryBean,而是getObject创建的Bean。如果在bean的名称前加一个&符号,则可以获得到该工厂的bean。

1
2
3
4

run.getBean("myFactoryBean");  // 获取的是getObject创建的bean
run.getBean("&myFactoryBean"); // 获取的是myFactoryBean

据说MyBatis等框架都是通过这种方式注入的。