spring

    SpringIOC就不在介紹了的吧,對容器創建,管理對象的過程非常有必要自己熟悉瞭解一下其中的生產規程。手寫一個簡易版的吧。

不多說,先寫一個出來

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.lang.reflect.Field;
import java.util.List;

/**
 * @Author: panda
 * @Data: 2018/12/10 0:15
 * @Version: 1.0
 */
public class ClassPathXmlApplicationContext {

    private String xmlPath;

    public ClassPathXmlApplicationContext(String xmlPath){
        this.xmlPath = xmlPath;
    }

    Object object = null;

    public Object getBean(String beanId)throws  Exception{
        //xml解析器
        SAXReader saxReader = new SAXReader();
        //得到document文檔對象
        Document read = saxReader.read(this.getClass().getClassLoader().getResourceAsStream(xmlPath));
        //得到根節點對象
        Element rootElement = read.getRootElement();
        //得到對象元素
        List<Element> elements = rootElement.elements();
        for(Element element : elements){
            String elementId  = element.attributeValue("id");
            if(!beanId.equals(elementId)){
                continue;
            }
            String className = element.attributeValue("class");
            Class<?> forName = Class.forName(className);
            object = forName.getInterfaces();
            List<Element> elementsList = element.elements();
            for(Element element1 : elementsList){
                String name = element1.attributeValue("name");
                String value = element1.attributeValue("value");
                Field declaredField = forName.getDeclaredField(name);
                declaredField.setAccessible(true);
                declaredField.set(object,value);
            }
        }
        return object;
    }

    public static void main(String[] args)throws  Exception {
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("test.xml");
        User user = (User) classPathXmlApplicationContext.getBean("user");
        System.out.println(user);
    }
}

<?xml version="1.0" encoding="utf-8" ?>
<beans>
    <bean id="user" class="com.example.demo.User">
        <property name="id" value="1"></property>
        <property name="name" value="panda"></property>
    </bean>
</beans>
/**
 * @Author: panda
 * @Data: 2018/12/10 0:45
 * @Version: 1.0
 */
public class User {

    private String id;

    private String name;

    public User(){

    }

    public User(String id){
        this.id = id;
    }
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 總結:

每個人寫代碼的風格都不一樣,主要是學習其思想

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章