这里有新鲜出炉的精品教程,程序狗速度看过来!
Spring是什么呢?首先它是一个开源的项目,而且目前非常活跃;它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口,采用IOC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等
本篇文章中主要介绍了Java中spring读取配置文件的几种方法示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
Spring读取配置XML文件分三步:
一.新建一个Java Bean:
- package springdemo;
- public class HelloBean {
- private String helloWorld;
- public String getHelloWorld() {
- return helloWorld;
- }
- public void setHelloWorld(String helloWorld) {
- this.helloWorld = helloWorld;
- }
- }
二.构建一个配置文件bean_config.xml:
- <?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="helloBean" class="springdemo.HelloBean">
- <property name="helloWorld">
- <value>Hello!chb!</value>
- </property>
- </bean>
- </beans>
三.读取配置文件:
1.利用ClassPathXmlApplicationContext:
- ApplicationContext context = new ClassPathXmlApplicationContext("bean_config.xml");
- //这种用法不够灵活,不建议使用。
- HelloBean helloBean = (HelloBean) context.getBean("helloBean");
- System.out.println(helloBean.getHelloWorld());
ClassPathXmlApplicationContext实现了接口ApplicationContext,ApplicationContext实现了BeanFactory。其通过jdom进行XML配置文件的读取,并构建实例化Bean,放入容器内。
- public interface BeanFactory {
- public Object getBean(String id);
- }
- //实现类ClassPathXmlApplicationContext
- import java.lang.reflect.Method;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.jdom.Document;
- import org.jdom.Element;
- import org.jdom.input.SAXBuilder;
- public class ClassPathXmlApplicationContext implements BeanFactory {
- private Map < String,
- Object > beans = new HashMap < String,
- Object > ();
- //(IOC:Inverse of Control/DI:Dependency Injection)
- public ClassPathXmlApplicationContext() throws Exception {
- SAXBuilder sb = new SAXBuilder();
- Document doc = sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml")); //构造文档对象
- Element root = doc.getRootElement(); //获取根元素HD
- List list = root.getChildren("bean"); //取名字为disk的所有元素
- for (int i = 0; i < list.size(); i++) {
- Element element = (Element) list.get(i);
- String id = element.getAttributeValue("id");
- String clazz = element.getAttributeValue("class");
- Object o = Class.forName(clazz).newInstance();
- System.out.println(id);
- System.out.println(clazz);
- beans.put(id, o);
- for (Element propertyElement: (List < Element > ) element.getChildren("property")) {
- String name = propertyElement.getAttributeValue("name"); //userDAO
- String bean = propertyElement.getAttributeValue("bean"); //u
- Object beanObject = beans.get(bean); //UserDAOImpl instance
- String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
- System.out.println("method name = " + methodName);
- Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);
- m.invoke(o, beanObject);
- }
- }
- }
- public Object getBean(String id) {
- return beans.get(id);
- }
- }
BeanFactory是一个很根的接口,ApplicationContext和ClassPathXmlApplicationContext都实现了接口BeanFactory,所以也可以这么写:
- ApplicationContext context = new ClassPathXmlApplicationContext("bean_config.xml");
- HelloBean helloBean = (HelloBean) context.getBean("helloBean");
- BeanFactory factory = new ClassPathXmlApplicationContext("bean_config.xml");
- HelloBean helloBean = (HelloBean) factory.getBean("helloBean");
ClassPathXmlApplicationContext层级关系如下:
2.利用FileSystemResource读取
- Resource rs = new FileSystemResource("D:/software/tomcat/webapps/springWebDemo/WEB-INF/classes/bean_config.xml");
- BeanFactory factory = new XmlBeanFactory(rs);
- HelloBean helloBean = (HelloBean) factory.getBean("helloBean");
- System.out.println(helloBean.getHelloWorld());
注意:利用FileSystemResource,则配置文件必须放在project直接目录下,或者写明绝对路径,否则就会抛出找不到文件的异常。
Spring读取properties配置文件
介绍两种技术:利用spring读取properties 文件和利用java.util.Properties读取:
一.利用spring读取properties 文件
还利用上面的HelloBean.java文件,构造如下bean_config.properties文件:
- helloBean.class=springdemo.HelloBean
- helloBean.helloWorld=Hello!HelloWorld!
属性文件中的"helloBean"名称即是Bean的别名设定,.class用于指定类来源。
然后利用org.springframework.beans.factory.support.PropertiesBeanDefinitionReader来读取属性文件。
- BeanDefinitionRegistry reg = new DefaultListableBeanFactory();
- PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader(reg);
- reader.loadBeanDefinitions(new ClassPathResource("bean_config.properties"));
- BeanFactory factory = (BeanFactory) reg;
- HelloBean helloBean = (HelloBean) factory.getBean("helloBean");
- System.out.println(helloBean.getHelloWorld());
二.利用java.util.Properties读取属性文件
比如,我们构造一个ip_config.properties来保存服务器ip地址和端口,如:
ip=192.168.0.1
port=8080
我们可以用如下程序来获得服务器配置信息:
- InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ip_config.properties");
- Properties p = new Properties();
- try {
- p.load(inputStream);
- } catch(IOException e1) {
- e1.printStackTrace();
- }
- System.out.println("ip:" + p.getProperty("ip") + ",port:" + p.getProperty("port"));
三.用接口类WebApplicationContext来取。
- private WebApplicationContext wac;
- wac = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
- wac = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
- JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");
其中,jdbcTemplate为spring配置文件中的一个bean的id值。
这种用法比较灵活,spring配置文件在web中配置启动后,该类会自动去找对应的bean,而不用再去指定配置文件的具体位置。
来源: http://www.phperz.com/article/17/1203/358478.html