Spring入門06 - Bean定義檔進階讀取

入門 06 - Bean定義檔進階讀取 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 BeanFactory可以接受InputStream作爲建構函式的參數,也可以接受實作 org.springframework.core.io.Resource接口的對象作爲參數,像是ClassPathResource、 FileSystemResource、InputStreamResource、ServletContextResource、 UrlResource,在不同的場合可以使用對應的類別,以ClassPathResource爲例:

Resource resource = new ClassPathResource("bean.xml");

BeanFactory factory = new XmlBeanFactory(resource);

HelloBean hello = (HelloBean) factory.getBean("helloBean");

....


 在bean定義檔中如果有多個bean的定義,而您想要一次取回所有的bean,則您可以使用 org.springframework.beans.factory.ListableBeanFactory,藉由其對應的方法取回所有對應的 bean對象,例如若bean定義檔中的內容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="helloBeanOfJustin" class="onlyfun.caterpillar.HelloBean">

        <property name="helloWord"><value>Hello!Justin!</value></property>

    </bean>

    <bean id="helloBeanOfcaterpillar" class="onlyfun.caterpillar.HelloBean">

        <property name="helloWord"><value>Hello!caterpillar!</value></property>

    </bean>

</beans>


 則我們可以根據型態一次取回所有的bean對象,例如:

Resource resource = new ClassPathResource("bean.xml");

        ListableBeanFactory factory = new XmlBeanFactory(resource);

      

        Map helloBeans = factory.getBeansOfType(HelloBean.class, false, false);


 您可以看看API文件瞭解getBeansOfType()或其它ListableBeanFactory的方法使用方式。
  將所有的bean定義全部寫在一個bean定義文件只對小型的程序可行,對於大型的應用程序來說,所需要的bean量是非常大的,我們不可能將之撰寫在同一 個定義檔中,之前的方法將一個定義檔綁定至一個BeanFactory中,BeanFactory的創建需要耗費資源,這個方法顯然不可行。
 我們可以使用org.springframework.beans.factory.xml.XmlBeanDefinitionReader來進行多 個定義檔的加載,它需要一個實作 org.springframework.beans.factory.support.BeanDefinitionRegistry接口的對象作爲建 構時的參數,例如 org.springframework.beans.factory.support.DefaultListableBeanFactory, XmlBeanDefinitionReader使用一個BeanDefinitionRegistry類型的對象來註冊多個bean定義檔,我們不用爲 每個bean定義檔創建一個BeanFactory。
 舉個使用的實際例子:

BeanDefinitionRegistry reg = new DefaultListableBeanFactory();

XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(reg);

  

// 加載bean定義檔  

reader.loadBeanDefinitions(new ClassPathResource("bean1.xml"));

reader.loadBeanDefinitions(new ClassPathResource("bean2.xml"));

....

 

// 取得Bean

BeanFactory bf = (BeanFactory) reg;

Object o = bf.getBean("helloBean");

....


 DefaultListableBeanFactory同時實作BeanDefinitionRegistry、BeanFactory、 ListableBeanFactory等接口,爲了能使用BeanFactory的功能,我們必須轉換操作的界面,就如上面的程序所示。
 暫時介紹到這邊,有任何值得介紹的定義檔讀取方式,將隨時補充於此。

發佈了106 篇原創文章 · 獲贊 0 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章