`
gaoyuntao2005
  • 浏览: 303050 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

入门 06 - Bean定义档进阶读取

阅读更多


 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的功能,我们必须转换操作的界面,就如上面的程序所示。
 暂时介绍到这边,有任何值得介绍的定义档读取方式,将随时补充于此。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics