本文共 6164 字,大约阅读时间需要 20 分钟。
转自:http://www.cnblogs.com/shamgod/p/4586971.html
一、目标:读取配置文件properties文件,获得类名来生成对象
二、类
1.Movable.java
1 2 3 | public interface Movable { void run(); } |
2.Car.java
1 2 3 4 5 6 7 | public class Car implements Movable { public void run() { System.out.println( "Car running..............." ); } } |
3.spring.properties
PS:"="两边不能有空格
1 | vechileType=com.tong.spring.factory.Car |
4.Test.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class Test { @org .junit.Test public void test() { //读取properties文件,获得类名来生成对象 Properties pros = new Properties(); try { //1.读取要实例化的类名 pros.load(Test. class .getClassLoader().getResourceAsStream( "com/tong/spring/factory/spring.properties" )); String vechileType = pros.getProperty( "vechileType" ); //2.利用反射装载类及用newInstance()实例化类 Object o = Class.forName(vechileType).newInstance(); Movable m = (Movable)o; m.run(); } catch (Exception e) { e.printStackTrace(); } } } |
5.运行结果:
6.若改成spring读取xml文件,则spring配置好后,增加applicationContext.xml
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version= "1.0" encoding= "UTF-8" ?> <beans xmlns= "http://www.springframework.org/schema/beans" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id= "vehicle" class = "com.tong.spring.factory.Car" > </bean> <!-- more bean definitions go here --> </beans> |
7.Test.java改为如下
1 2 3 4 5 6 7 8 9 10 11 | public class Test { @org .junit.Test public void test() { BeanFactory factory = new ClassPathXmlApplicationContext( "applicationContext.xml" ); Object o = factory.getBean( "vehicle" ); Movable m = (Movable)o; m.run(); } } |
转自:http://www.cnblogs.com/shamgod/p/4587387.html
一、概述
1.目标:模拟Spring的Ioc
2.用到的知识点:利用jdom的xpath读取xml文件,反射
二、有如下文件:
1.applicationContext.xml
1 2 3 4 5 | <?xml version= "1.0" encoding= "UTF-8" ?> <beans> <bean id= "vehicle" class = "com.tong.spring.factory.Car" > </bean> </beans> |
2.BeanFactory.java
1 2 3 | public interface BeanFactory { Object getBean(String id); } |
3.ClassPathXmlApplicationContext.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | public class ClassPathXmlApplicationContext implements BeanFactory{ private Map<String, Object> container = new HashMap<String, Object>(); public ClassPathXmlApplicationContext(String fileName) { //读取xml文件 SAXBuilder sb = new SAXBuilder(); Document doc; try { //doc = sb.build(fileName); //Test.java要改为BeanFactory factory = new ClassPathXmlApplicationContext("com/tong/spring/factory/applicationContext.xml"); //否则付出现“java.net.MalformedURLException” doc = sb.build( this .getClass().getClassLoader().getResourceAsStream(fileName)); Element root = doc.getRootElement(); List list = XPath.selectNodes(root, "/beans/bean" ); 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(); container.put(id, o); } } catch (Exception e) { e.printStackTrace(); } } @Override public Object getBean(String id) { return container.get(id); } } |
4.Movable.java
1 2 3 | public interface Movable { void run(); } |
5.Car.java
1 2 3 4 5 6 7 | public class Car implements Movable { public void run() { System.out.println( "Car running..............." ); } } |
6.Test.java
1 2 3 4 5 6 7 8 9 10 11 12 | public class Test { @org .junit.Test public void test() { //BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); BeanFactory factory = new ClassPathXmlApplicationContext( "com/tong/spring/factory/applicationContext.xml" ); Object o = factory.getBean( "vehicle" ); Movable m = (Movable)o; m.run(); } } |
运行结果:
package com.studytrails.xml.jdom; import java.io.IOException;import java.util.List; import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.Namespace;import org.jdom2.filter.Filters;import org.jdom2.input.SAXBuilder;import org.jdom2.xpath.XPathExpression;import org.jdom2.xpath.XPathFactory; public class XPathExample2 { private static String xmlSource = "http://feeds.bbci.co.uk/news/technology/rss.xml?edition=int"; public static void main(String[] args) throws JDOMException, IOException { // read the XML into a JDOM2 document. SAXBuilder jdomBuilder = new SAXBuilder(); Document jdomDocument = jdomBuilder.build(xmlSource); // use the default implementation XPathFactory xFactory = XPathFactory.instance(); // System.out.println(xFactory.getClass()); // select all links XPathExpressionexpr = xFactory.compile("//link", Filters.element()); List links = expr.evaluate(jdomDocument); for (Element linkElement : links) { System.out.println(linkElement.getValue()); } // select all links in image element expr = xFactory.compile("//image/link", Filters.element()); List links2 = expr.evaluate(jdomDocument); for (Element linkElement : links2) { System.out.println(linkElement.getValue()); } // get the media namespace Namespace media = jdomDocument.getRootElement().getNamespace("media"); // find all thumbnail elements from the media namespace where the // attribute widht has a value > 60 expr = xFactory.compile("//media:thumbnail[@width>60.00]", Filters.element(), null, media); // find the first element in the document and get its attribute named 'url' System.out.println(expr.evaluateFirst(jdomDocument).getAttributeValue("url")); // find the child element of channel whose name is title. find the // descendant of item with name title. Element firstTitle = xFactory.compile("//channel/child::item/descendant::title", Filters.element()).evaluateFirst(jdomDocument); System.out.println(firstTitle.getValue()); } }