FactoryBean

62次阅读

共计 629 个字符,预计需要花费 2 分钟才能阅读完成。

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

正文完
 0