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


老污的猫
30 声望5 粉丝

下一篇 »
Synchronized