Spring系列(七):@FactoryBean注解用法介紹
今天給大家介紹@FactoryBean注解用法,希望對大家能有所幫助!? ?
? ? ? ?
1、@FactoryBean注解介紹
FactoryBean是實現(xiàn)了FactoryBean<T>接口的Bean,可以該Bean的ID從BeanFactory中獲取的實際上是FactoryBean中g(shù)etObject()方法返回的實例對象,而并不是直接FactoryBean本身,想要獲取FactoryBean對象本身,可以在id前面加一個&符號來獲取。
BeanFactory部分代碼:
說明:String FACTORY_BEAN_PREFIX = "&" ,&符號表示要獲取FactoryBean本身
2、@FactoryBean的源碼內(nèi)容如下:
Spring3.0版本之后,F(xiàn)actoryBean開始支持泛型,即接口聲明改為FactoryBean<T>的形式
實現(xiàn)FactoryBean<T>接口有一下三個方法
getObject:獲取bean對應的實例對象
getObjectType:獲取factoryBean獲取到的實例類型
isSingleton:factoryBean創(chuàng)建的實例是否是單實例
3、用法示例
3.1 新建Book.java
3.2 新建BookFactoryBean.java
3.3 FactoryBeanConfig.java
3.4 TestFactoryBean.java
4、@FactoryBean應用場景
單一的對象使用FactoryBean意義不大。
創(chuàng)建對象時需要依賴于需要別的接口來監(jiān)聽數(shù)據(jù)、根據(jù)推送數(shù)據(jù)過來的接口做一些數(shù)據(jù)處理。
搭配其他接口協(xié)作, 依賴于Spring生命周期, 針對某個時間節(jié)點、合適的條件判斷,來生成自己需要的對象。
5、典型應用
MyBatis3 提供 mybatis-spring項目中的 org.mybatis.spring.SqlSessionFactoryBean:
阿里開源的分布式服務框架 Dubbo 中的Consumer 也使用到了FactoryBean
shiro中ShiroFilterFactoryBean
druid的JdbcStatManagerFactoryBean