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;
    }
}

 总结:

每个人写代码的风格都不一样,主要是学习其思想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值