spring中的FactoryBean代碼示例
上篇文章中我們介紹了淺談Spring的兩種配置容器,接下來(lái)我們就了解下spring中的FactoryBean的相關(guān)內(nèi)容,具體如下。
從SessionFactory說(shuō)起:
在使用SSH集成開發(fā)的時(shí)候,我們有時(shí)候會(huì)在applicationContext.xml中配置Hibernate的信息,下面是配置SessionFactory的一段示例代碼:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<!-- 是否自動(dòng)更新表項(xiàng)目 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 數(shù)據(jù)庫(kù)使用的方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<!-- 是否顯示產(chǎn)生的sql語(yǔ)句 -->
<prop key="hibernate.show_sql">true</prop>
<!-- 是否顯示格式化產(chǎn)生的sql語(yǔ)句 -->
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>bean/User.hbm.xml</value>
</list>
</property>
</bean>
下面我們?cè)诔绦蛑腥∫幌聅essionFacroty,然后打印出出它的類型
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println(applicationContext.getBean("sessionFactory").getClass().getName());
我們會(huì)發(fā)現(xiàn)它的類型為 org.hibernate.internal.SessionFactoryImpl,而不是org.springframework.orm.hibernate4.LocalSessionFactoryBean,這是為什么呢?
其實(shí)在Spring中為我們提供了兩種類型的bean,一種就是普通的bean,我們通過(guò)getBean(id)方法獲得是該bean的實(shí)際類型,另外還有一種bean是FactoryBean,也就是工廠bean,我們通過(guò)getBean(id)獲得是該工廠所產(chǎn)生的Bean的實(shí)例,而不是該FactoryBean的實(shí)例。
那么如何實(shí)現(xiàn)一個(gè)FactoryBean呢,Spring為我們提供了一個(gè)FactotyBean的接口,只要實(shí)現(xiàn)了這個(gè)接口,我們創(chuàng)建的bean就是FactoryBean,下面是一個(gè)示例
package factory;
import org.springframework.beans.factory.FactoryBean;
import bean.User;
public class UserFactory implements FactoryBean<User>{
@Override
public User getObject() throws Exception {
return new User();
}
@Override
public Class<?> getObjectType() {
return User.class;
}
/**
* 工廠所管理的對(duì)象是否為單例的
* 即如果該方法返回true,那么通過(guò)getObject()方法返回的對(duì)象都是同一個(gè)對(duì)象
*/
@Override
public boolean isSingleton() {
return true;
}
}
在applicationContext.xml中配置一下
<bean id="userFactory" class="factory.UserFactory" />
然后我們?cè)賹serFactory打印出來(lái),得到的對(duì)象為bean.User類型。
ok,那么如何才能得到UserFactory的實(shí)例,而不是User對(duì)象的實(shí)例,我們只需要在取對(duì)象時(shí)加上一個(gè)"&"符號(hào),如下所示
UserFactory userFactory = (UserFactory) applicationContext.getBean("&userFactory");
總結(jié)
以上就是本文關(guān)于spring中的FactoryBean代碼示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Java Spring-Cache key配置注意事項(xiàng)介紹、Java之Spring注解配置bean實(shí)例代碼解析等,有什么問(wèn)題可以隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家的。感謝朋友們對(duì)本站的支持!
- Spring中BeanFactory與FactoryBean接口的區(qū)別詳解
- Spring?IOC容器FactoryBean工廠Bean實(shí)例
- Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情
- Spring BeanFactory和FactoryBean區(qū)別解析
- spring如何通過(guò)FactoryBean配置Bean
- 深入了解Spring中的FactoryBean
- spring中的BeanFactory與FactoryBean的講解
- spring中FactoryBean中的getObject()方法實(shí)例解析
- Spring詳細(xì)講解FactoryBean接口的使用
相關(guān)文章
關(guān)于String.format()格式化輸出方式
String.format()是Java的格式化輸出方法,支持多種數(shù)據(jù)類型和格式化選項(xiàng),它在格式化和拼接字符串時(shí)具有較高的靈活性,但效率相對(duì)較低,特別是在處理大量數(shù)據(jù)時(shí),在實(shí)際編程中,應(yīng)根據(jù)具體需求選擇合適的字符串拼接方式2024-12-12
SpringBoot全局異常處理與定制404頁(yè)面的方法
這篇文章主要介紹了SpringBoot全局異常處理與定制404頁(yè)面的相關(guān)資料,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2007-09-09
java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲代碼示例
這篇文章主要介紹了java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲代碼示例,還是挺不錯(cuò)的,這里分享給大家,需要的朋友可以參考下。2017-11-11
java簡(jiǎn)單實(shí)現(xiàn)多線程及線程池實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了java簡(jiǎn)單實(shí)現(xiàn)多線程,及java爬蟲使用線程池實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03

