一.前言html
在平常的開發過程,常常使用或碰到的設計模式有代理、工廠、單例、反射模式等等。下面就對工廠模式模擬spring的bean加載過程進行解析,若是對工廠模式不熟悉的,具體能夠先去學習一下工廠模式的概念。在來閱讀此篇博文,效果會比較好。spring
二.知識儲備設計模式
在介紹本文的以前,不瞭解或不知道如何解析XML的,請先去學習一下XML的解析。掌握目前主要的幾種解析XML中的一種便可,如下博文說明了如何採用Dom4J解析XML文件的,接下去的例子也是經常使用Dom4J來解析XML。博文地址參考:http://www.cnblogs.com/hongwz/p/5514786.html;app
學習應該是學習一種方式,而不是學習某一種知識點,掌握了學習的方式,之後在開發中,遇到問題咱們就能夠快速的解決,快速的學習某一方面不瞭解的知識點,下面提供幾點建議:dom
1.多閱讀源代碼,多看一些別人的代碼,開卷是有益的。ide
2.在學習某一項新技術的時候,首先先去下載其對應API進行學習。學習
3.遇到問題先思考在去google,總有不同的體會。測試
三.例子解析google
一、建立對應不一樣的實例spa
/** * 汽車類. */ public class Car { public void run() { System.out.println("這是一輛汽車..."); } }
/** * 火車類. */ public class Train { public void run() { System.out.println("這是一輛火車...."); } }
二、建立BeanFactory
public interface BeanFactory { Object getBean(String id) throws ExecutionException; }
/** * BeanFactory實現類 */ public class ClassPathXmlApplicationContext implements BeanFactory { private Map<String, Object> map = new HashMap<String, Object>(); @SuppressWarnings("unchecked") public ClassPathXmlApplicationContext(String fileName) throws DocumentException, InstantiationException, IllegalAccessException, ClassNotFoundException { //加載配置文件 SAXReader reader = new SAXReader(); Document document = reader.read(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream(fileName)); //獲取根節點 Element root = document.getRootElement(); //獲取子節點 List<Element> childElements = root.elements(); for (Element element : childElements) { map.put(element.attributeValue("id"), Class.forName(element.attributeValue("class")).newInstance()); } } @Override public Object getBean(String id) throws ExecutionException { return map.get(id); } }
三、applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="car" class="com.shine.spring.domain.Car"> </bean> <bean id="train" class="com.shine.spring.domain.Train"> </bean> </beans>
四、測試類
public class BeanFactoryTest { public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, DocumentException, ExecutionException { BeanFactory beanFactory = new ClassPathXmlApplicationContext("com/shine/spring/applicationContext.xml"); Object obj = beanFactory.getBean("car"); Car car = (Car)obj; car.run(); } }
五、運行結果
四.總結 此例子是一個比較簡單的小例子,可是涉及的知識點比較多,須要瞭解的知識面要比較普遍一些,這邊主要的提供了一種學習的方式。