BeanFactory和ApplicationContext的區別


 1.BeanFactory和ApplicationContext的異同點: 

       相同點:

    兩者都是通過xml配置文件加載bean,ApplicationContext和BeanFacotry相比,提供了更多的擴展功能。

   不同點:

    BeanFactory是延遲加載,如果Bean的某一個屬性沒有注入,BeanFacotry加載后,直至第一次使用調用getBean方法才會拋出異常;而ApplicationContext則在初始化自身是檢驗,這樣有利於檢查所依賴屬性是否注入;所以通常情況下我們選擇使用ApplicationContext

 2.在實際開發中用BeanFactory還是ApplicationContext

  ApplicationContext包含BeanFactory的所有功能。通常建議比BeanFactory優先,除非有一些限制的場合如字節長度對內存有很大的影響時(Applet)。然后,絕大多數"典型的"企業應用和系統,ApplicationContext就是你需要使用的。Spring2.0及以上版本,大量使用了link  linkend="beans-factory-extension-bpp">BeanPostProcessor擴展(以便應用代理等功能),如果你選擇BeanFactory則無法使用相當多的支持功能,如事務和AOP,這可能會導致混亂,因為配置並沒有錯誤。

   3.一個簡單的例子來證明BeanFactory和ApplicationContext主要區別

    搭建工程的環境就不說了,直接上代碼。

1.首先創建一個實體類:User

 

public class User {

     public User(){

      System.out.println("實例化User");

     }

}

 

2.在創建一個ApplicationContext.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"

    xsi:schemaLocation="

        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="user" class="cn.test.User"></bean>

</beans>

 

3.創建測試類

   

public class TestHappy {

 

/**

 * BeanFactory的測試

 */

@Test

public void beanFactoryTest(){

BeanFactory beanFactory=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));

}

 

 

/**

 * ApplicationContext的測試

 */

@Test

public void applicationContextTest(){

ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

}

 

}

 

BeanFactory測試結果:

 

 

ApplicationContext測試結果:

 

       

 

  總結:

   BeanFactory當需要調用時讀取配置信息,生成某個類的實例。如果讀入的Bean配置正確,則其他的配置中有錯誤也不會影響程序的運行。而ApplicationContext 在初始化時就把 xml 的配置信息讀入內存,對 XML 文件進行檢驗,如果配置文件沒有錯誤,就創建所有的Bean ,直接為應用程序服務。相對於基本的BeanFactory,ApplicationContext 唯一的不足是占用內存空間。當應用程序配置Bean較多時,程序啟動較慢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM