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的功能,我們必須轉換操作的介面,就如上面的程式所示。
分享到:
相关推荐
spring2.5向spring3过渡,必学零配置注解实现Bean定义。
1、<bean>标签主要用来进行Bean定义; 2、alias用于定义Bean别名的;...这两种方式都是通过调用Bean Definition Reader 读取Bean定义,内部实现没有任何区别。标签可以放在下的任何位置,没有顺序关系。
很多时候需要文件做数据交互,接收到文件后需要对文件解析成bean实体类,这里提供的是工具类,任意文件转任意实体都可以,只要简单的配置一下Class类,很实用
Bean保存成流文件,读取文件转换成bean
【框架源码篇 04】Spring源码手写篇-Bean定义配置化
spring3零配置注解实现Bean定义(包括JSR-250、JSR-330)
主要介绍了Spring Boot中Bean定义方调用方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
bean加入spring容器管理的方式,bean加入applicationcontext容器的方式
主要介绍了Spring实战之抽象Bean和子Bean定义与用法,结合实例形式分析了Spring抽象Bean和子Bean相关配置、定义与使用操作技巧,需要的朋友可以参考下
根据读取数据库自动生成实体bean,采用freemarker模板,详细使用都在包中
主要介绍了Spring实战之Bean定义中的SpEL表达式语言支持操作,结合实例形式分析了Bean定义中的SpEL表达式语言操作步骤与实现技巧,需要的朋友可以参考下
完整版Java web开发教程PPT课件 Java开发进阶教程 第09章 jstl、el、java bean(共18页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web...
使用反射技术获取Bean类信息,使用Microsoft SQL Server Compact Edition数据库,使用VS2008编程工具。
Spring项目bean实例化代码,包括bean是如何创建的;实例化bean的三种方式,构造方法,静态工厂和实例工厂。
spring动态向容器中添加bean和删除指定bean,不需要重启应用
ejb3,Session Bean,实体Bean,MessageDriven Bean综合案例,jboss5下运行
xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么...
NULL 博文链接:https://ssailyang.iteye.com/blog/1248407
在本文中,我将讨论棘手的Spring Boot bean定义覆盖机制。 为了使您对该主题更加清楚,让我们从小测验开始。请看下一个简单的例子。 因此,我们有2种配置,它们使用名称beanName实例化bean,在主应用程序中,我们仅...
spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat