FactoryBean<T>是一个接口,实现此接口的Bean是交由FactoryBean管理的Bean。Spring中共有二种bean,一种是BeanFactory管理的bean,另一种是实现FactoryBean接口的Bean。
FactoryBean管理的Bean实际上也是由Spring进行管理、实例化,配置,因此由FactoryBean管理的Bean不能再次配置到Spring配置文件中,否则会报异常。
从spring的applicationContext或BeanFactory获取bean时,获取到是FactoryBean创建的实例,而不是FactoryBean自己;如果想通过Spring拿到FactoryBean,需要在名称前面加&符号。
FactoryBean在IOC的应用,在获取Bean的时候,都会经过getObjectForBeanInstance方法,这个方法会进行如下判断:
1.如果Bean是被FactoryBean引用,但Bean对象不是Factory相关(以&为前缀),则抛出异常(BeanIsNotAFactoryException);也就是说通过FactoryBean获取Bean,这个Bean不能配置到Spring配置文件或者注解实例化;
2.如果Bean实例不是FactoryBean,或者指定名称是FactoryBean引用,也就是普通的bean调用,则直接返回;
3.以上情况都不是,则调用FactoryBean获取Bean
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。