在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ Spring: FactoryBean相對于BeanFactory有啥好處?

Spring: FactoryBean相對于BeanFactory有啥好處?

FactoryBean理解上比較繞
那么這種概念,在軟件工程上
或者說在平時使用上
相對于BeanFactory有啥好處?
為何要有這么個設(shè)計模式?

回答
編輯回答
殘淚

BeanFactory是Spring中IOC容器最核心的接口,遵循了IOC容器中所需的基本接口。例如我們很常見的:ApplicationContext,XmlBeanFactory 等等都使用了BeanFactory這個接口。

FactoryBean是工廠類接口,當你只是想簡單的去構(gòu)造Bean,不希望實現(xiàn)原有大量的方法。它是一個Bean,不過這個Bean能夠做為工廠去創(chuàng)建Bean,同時還能修飾對象的生成。

總結(jié):FactoryBean比BeanFactory在生產(chǎn)Bean的時候靈活,還能修飾對象,帶有工廠模式和裝飾模式的設(shè)計思想在里面,不過它的存在還是以Bean的形式存在。

直接看MyBatis的SqlSessionFactoryBean就明白了

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="typeAliasesPackage" value="com.george"/>
    <property name="typeAliasesSuperType" value="com.george.common.persistence.BaseEntity"/>
    <property name="mapperLocations" value="classpath:/mappings/**/**/*.xml"/>
    <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
</bean>

Spring會調(diào)用SqlSessionFactoryBean這個實現(xiàn)了FactoryBean的工廠Bean 同時加載dataSource,Mapper文件的路徑,對sqlSessionFactory進行初始化(這里就不貼源碼了 源碼看一下)

BeanFactory因為是核心接口,編寫復雜邏輯很容易接觸到其他不必要的接口,不好實現(xiàn)。
如果是FactoryBean就簡單很多,SqlSessionFactoryBean這個工廠Bean生產(chǎn)不同數(shù)據(jù)源的sqlSessionFactory,同時加載相應的配置信息。

2017年12月29日 08:13
編輯回答
涼薄

兩者不是用在同一個地方的,所以不具有相互替代性,也不具有可比性,就好比桌子腿跟勺子。你把spring框架看成一張餐桌,BeanFactory好比桌子腿,屬于框架的一部分,而FactoryBean是在框架內(nèi)根據(jù)業(yè)務需要來的,你喝湯可以用勺子,夾菜可以用筷子,但勺子和筷子都不能代替桌腿。

2017年2月20日 21:47