IOC的基本原理实现

class User{
    private String number;
    private String name;

    @Override
    public String toString() {
        return "User{" +
                "number='" + number + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}
class ApplicationResouceReader{
    private String url;
    public ApplicationResouceReader(String url){
        this.url=url;
    }
    public Object getbean(String id) throws Exception {
        //获取xml文件
        InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream(url);
        SAXReader reader = new SAXReader();
        Document doc = reader.read(resourceAsStream);
        //解析xml文件获取beanId相同的节点
        Element rootElement = doc.getRootElement();
        List<Element> Belements = rootElement.elements();
        Element ele;
        for (int i=0;i<Belements.size();i++) {
            ele = Belements.get(i);
            if(!ele.attributeValue("id").equals(id)){
                continue;
            }
            String beanClass = ele.attributeValue("class");
            Class<?> forName = Class.forName(beanClass);
            //解析子节点
            //创建对象,并赋值
            Object instance = forName.newInstance();
            List<Element> Pelements = ele.elements();
            for (int j=0;j<Pelements.size();j++){
                String key_value = Pelements.get(j).attributeValue("key");
                String value_value = Pelements.get(j).attributeValue("value");
                Field declaredField = forName.getDeclaredField(key_value);
                declaredField.setAccessible(true);
                declaredField.set(instance,value_value);
            }
            return instance;
        }
        return null;
    }
}
public class test {
    @Test
    public void test() throws Exception {
        ApplicationResouceReader applicationResouceReader = new ApplicationResouceReader("Test-IOC.xml");
        User user1 = (User) applicationResouceReader.getbean("user2");
        System.out.println(user1);
    }
}
<?xml version="1.0" encoding="GB2312"?>
<beans>
    <bean id="user1" class="User">  
        <property key="number" value="1"/>
        <property key="name" value="张三"/>
    </bean>
    <bean id="user2" class="User">  
        <property key="number" value="2"/>
        <property key="name" value="李四"/>
    </bean>
    <bean id="user3" class="User">  
        <property key="number" value="3"/>
        <property key="name" value="王二麻子"/>
    </bean>
</beans>

猜你喜欢

转载自blog.csdn.net/qq_42239765/article/details/90644560