工廠模式模擬Spring的bean加載過程

一.前言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();
    }

}

五、運行結果

四.總結  此例子是一個比較簡單的小例子,可是涉及的知識點比較多,須要瞭解的知識面要比較普遍一些,這邊主要的提供了一種學習的方式。

相關文章
相關標籤/搜索