快速上手Spring 加载Bean配置文件
2008-11-10 15:47
791 查看
1. 创建项目 ? 新建一个Java Project:SpringBeanFile,注意要导入用户库Spring。 这是完成后整个项目的结构(预览一下): ? 项目源码下载(不包含库文件):http://free.ys168.com/?javamxj Spring目录下面。 2. 编写类文件 ? 下面开始创建一个新类:BeanFile ;包名:javamxj.spring.beanfile BeanFile.java package javamxj.spring.beanfile; public class BeanFile { private String beanFile = "多种方式加载Bean的配置文件"; public void setBeanFile(String beanFile) { this.beanFile = beanFile; } public String getBeanFile() { return beanFile; } } 新建Test.java,测试一下。 package javamxj.spring.beanfile; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.PropertiesBeanDefinitionReader; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; public class Test { public static void main(String[] args) { // 直接调用HelloBean BeanFile bf = new BeanFile(); System.out.println(bf.getBeanFile()); /** * 利用XmlBeanFactory(Resource resource) * 这里Resource必须是xml格式 * Resource包括:AbstractResource, ClassPathResource, FileSystemResource, * InputStreamResource, ServletContextResource, UrlResource */ /* * 利用 InputStreamResource(InputStream inputStream) * 要将bean.xml放在项目根目录下 */ InputStream is = null; try { is = new FileInputStream("bean1.xml"); } catch (FileNotFoundException e) { e.printStackTrace(); } Resource resource = new InputStreamResource(is); sayHello(resource); /* * 利用 ClassPathResource(String path) * 要将bean.xml放在源文件夹(src)目录下 */ resource = new ClassPathResource("bean2.xml"); sayHello(resource); /* * 利用 FileSystemResource(String path) * 要将bean.xml放在项目根目录下 */ resource = new FileSystemResource("bean3.xml"); sayHello(resource); /* * 利用 Properties * 要将bean.properties放在类路径--源文件夹(src)目录下 */ BeanDefinitionRegistry reg = new DefaultListableBeanFactory(); PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader( reg); reader.loadBeanDefinitions(new ClassPathResource("bean.properties")); BeanFactory factory = (BeanFactory) reg; bf = (BeanFile) factory.getBean("beanFile"); System.out.println("利用 " + bf.getBeanFile() + " 加载 Bean.properties"); /* * 利用 ApplicationContext * 要将bean.xml放在类路径--源文件夹(src)目录下 */ ApplicationContext appContext = new ClassPathXmlApplicationContext( "bean4.xml"); bf = (BeanFile) appContext.getBean("beanFile"); System.out.println("利用 " + bf.getBeanFile() + " 加载 Bean.xml"); } public static void sayHello(Resource resource) { BeanFactory factory = new XmlBeanFactory(resource); BeanFile bf = (BeanFile) factory.getBean("beanFile"); System.out.println("利用 " + bf.getBeanFile() + " 加载 Bean.xml"); } } 3. 配置文件 由上面的Test.java可知,这里一共需要四个XML文件和一个Properties文件,现在分别建立。 ? bean1.xml放在项目根目录下: bean1.xml xml version="1.0" encoding="GBK"?> DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="beanFile" class="javamxj.spring.beanfile.BeanFile"> <property name="beanFile"> <value>InputStreamResource(InputStream inputStream)value> property> bean> beans> bean2.xml、bean3.xml、bean4.xml与bean1.xml相似,仅仅需要替换一下值即可。重要的注意文件的存放位置。这里只给出不同的代码; ? bean2.xml放在源文件夹(src)目录下: bean2.xml(部分) <property name="beanFile"> <value>ClassPathResource(String path)value> property> ? bean3.xml放在项目根目录下: bean3.xml(部分) <property name="beanFile"> <value>FileSystemResource(String path)value> property> ? bean4.xml放在源文件夹(src)目录下: bean4.xml(部分) <property name="beanFile"> <value>ApplicationContextvalue> property> Spring也可以使用属性文件来定义配置文件,如下: ? bean.properties放在源文件夹(src)目录下: bean.properties beanFile.class=javamxj.spring.beanfile.BeanFile beanFile.beanFile=properties ? 还需要将上文《快速上手Spring--2.HelloWorld(2)》中的log4j.properties复制到src目录下。 4. 运行程序 右击Test.java,运行程序,控制台输出如下: 多种方式加载Bean的配置文件 利用 InputStreamResource(InputStream inputStream) 加载 Bean.xml 利用 ClassPathResource(String path) 加载 Bean.xml 利用 FileSystemResource(String path) 加载 Bean.xml 利用 properties 加载 Bean.properties 利用 ApplicationContext 加载 Bean.xml 5. 小结 这篇文章主要谈论了如何加载Spring的配置文件,一般来说,就是BeanFactory和ApplicationContext。最常使用的、简单的BeanFactory实现是org.springframework.beans.factory.xml.XmlBeanFactory,其加载方式为: BeanFactory factory = new XmlBeanFactory(Resource resource) 这里resource必须是xml格式。Resource包括: AbstractResource, ClassPathResource, FileSystemResource, InputStreamResource, ServletContextResource, UrlResource。这篇文章 谈了常用的三种:ClassPathResource, FileSystemResource, InputStreamResource。 ApplicationContext包括了BeanFactory的所有功能,也要比BeanFactory强大的多(以后会详细介绍的)。这里只简单的使用了ClassPathXmlApplicationContext加载了Bean配置文件。你可以将log4j.properties中的“Warn”改为“Debug”, 对比一下和ClassPathResource的输出, 在Eclipse中,bean2.xml、bean4xml虽然都是放在源文件夹(src)目录下,但实际上,是由已经编译好的Test.class从类文件夹(这里是bin文件夹)中加载的。 |
相关文章推荐
- 快速上手Spring--3. 加载Bean的配置文件
- 快速上手Spring--3. 加载Bean的配置文件
- 快速上手Spring--3. 加载Bean的配置文件
- 快速上手Spring--3. 加载Bean的配置文件
- 快速上手Spring--3. 加载Bean的配置文件
- Spring配置文件加载时出现Bean property 'newscontentDAO' is not writable or has an invalid setter method错误的解决
- spring学习总结(六):IOC & DI 配置Bean之作用域、加载外部属性文件、SPEL
- eclipse中Spring的配置文件不在src目录下加载bean失败的解决方案
- (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
- 在Maven项目中加载spring中的bean的配置xml文件会提示找不到解决方法
- Spring bean加载多个配置文件
- Spring配置文件加载时出现Bean property 'newscontentDAO' is not writable or has an invalid setter method错误的解决[00原创]
- Spring源码分析:Bean加载流程概览及配置文件读取
- Spring 怎样加载多个bean 配置文件
- Spring bean加载多个配置文件
- spring在javaWeb环境中加载 bean 配置文件方式的选择
- Spring源码分析:Bean加载流程概览及配置文件读取
- Spring源码分析之配置文件加载并注册Bean
- 通过DefaultListableBeanFactory加载.xml配置文件学习Spring-IoC容器注册/加载bean的机制(源码走读)
- Spring读取xml配置文件并加载bean对象