BeanFactory和FactoryBean在Spring中的區(qū)別是什么?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
在海湖新等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需設(shè)計網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,海湖新網(wǎng)站建設(shè)費用合理。
BeanFactory接口:
IoC容器的頂級接口,是IoC容器的最基礎(chǔ)實現(xiàn),也是訪問Spring容器的根接口,負責(zé)對bean的創(chuàng)建,訪問等工作。
其實在容器的初始化的時候,會對BeanFactory做很多事情,如:
obtainFreshBeanFactory();獲取BeanFactory;
prepareBeanFactory(beanFactory);BeanFactory的預(yù)準(zhǔn)備工作(BeanFactory進行一些設(shè)置)
postProcessBeanFactory(beanFactory);BeanFactory準(zhǔn)備工作完成后進行的后置處理工作;
invokeBeanFactoryPostProcessors(beanFactory);執(zhí)行BeanFactoryPostProcessor的方法;
BeanFactoryPostProcessor:BeanFactory的后置處理器。在BeanFactory標(biāo)準(zhǔn)初始化之后執(zhí)行的;
FactoryBean接口:
可以返回bean的實例的工廠bean,通過實現(xiàn)該接口可以對bean進行一些額外的操作,例如根據(jù)不同的配置類型返回不同類型的bean,簡化xml配置等。在使用上也有些特殊,BeanFactory接口中有一個字符常量String FACTORY_BEAN_PREFIX = "&"; 當(dāng)我們?nèi)カ@取BeanFactory類型的bean時,如果beanName不加&則獲取到對應(yīng)bean的實例;
如果beanName加上&,則獲取到BeanFactory本身的實例;FactoryBean接口對應(yīng)Spring框架來說占有重要的地位,Spring本身就提供了70多個FactoryBean的實現(xiàn)。他們隱藏了實例化一些復(fù)雜的細節(jié),給上層應(yīng)用帶來了便利。從Spring3.0開始,F(xiàn)actoryBean開始支持泛型。
代碼展示:
//創(chuàng)建一個Spring定義的FactoryBean public class ColorFactoryBean implements FactoryBean<Color> { //返回一個Color對象,這個對象會添加到容器中 @Override public Color getObject() throws Exception { // TODO Auto-generated method stub System.out.println("ColorFactoryBean...getObject..."); return new Color(); } @Override public Class<?> getObjectType() { // TODO Auto-generated method stub return Color.class; } //是單例? //true:這個bean是單實例,在容器中保存一份 //false:多實例,每次獲取都會創(chuàng)建一個新的bean; @Override public boolean isSingleton() { // TODO Auto-generated method stub return false; } }
public class Color { private Car car; public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } @Override public String toString() { return "Color [car=" + car + "]"; } }
xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <bean id="colorFactoryBean" class="spring2.ColorFactoryBean"></bean> </beans>
測試類:
public class Test1 { ClassPathXmlApplicationContext xmlBeanFactory = null; @Before public void initXmlBeanFactory() { System.out.println("\n========測試方法開始=======\n"); xmlBeanFactory = new ClassPathXmlApplicationContext("spring3.xml"); } @After public void after() { System.out.println("\n========測試方法結(jié)束=======\n"); } @Test public void test8() { System.out.println(xmlBeanFactory.getBean("colorFactoryBean")); System.out.println("==================="); System.out.println(xmlBeanFactory.getBean("&colorFactoryBean")); } }
測試結(jié)果:
========測試方法開始======= 十二月 09, 2019 4:49:52 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2e5c649: startup date [Mon Dec 09 16:49:52 CST 2019]; root of context hierarchy 十二月 09, 2019 4:49:52 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from class path resource [spring3.xml] ColorFactoryBean...getObject... Color [car=null] =================== spring2.ColorFactoryBean@6ddf90b0 ========測試方法結(jié)束=======
看完上述內(nèi)容,你們掌握BeanFactory和FactoryBean在Spring中的區(qū)別是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享標(biāo)題:BeanFactory和FactoryBean在Spring中的區(qū)別是什么
當(dāng)前地址:http://muchs.cn/article0/ghhgoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、網(wǎng)站導(dǎo)航、網(wǎng)頁設(shè)計公司、用戶體驗、面包屑導(dǎo)航、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)