BeanFactory和FactoryBean在Spring中的區(qū)別是什么

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)

成都網(wǎng)站建設(shè)