2020-09-20 简单实现Spring创建对象,除了byte类型的其余七个基本类型属性赋值

导包

	<dependencies>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
    </dependencies>

代码

public class MySpring {


    public Object getBean(String className){
        Object obj = null;if(getClassName(className)==null){
            throw new RuntimeException("Bean属性值不存在");
        }

        try {
            //创建对象
            Class clazz = Class.forName(getClassName(className));
            obj = clazz.newInstance();
            //调用set方法给属性赋值
            //找到所有的属性
            Field[] fields = clazz.getDeclaredFields();
            for(int i = 0;i<fields.length;i++){
                //获得所有set方法的名称
                String methodName = new StringBuffer("set").append(fields[i].getName().substring(0,1).toUpperCase()).append(fields[i].getName().substring(1)).toString();
                //获得属性的类型
                Class classes = fields[i].getType();
                //执行set方法给属性赋值
                Method method = clazz.getDeclaredMethod(methodName,classes);
                //执行set方法完成赋值
                Constructor conn = classes.getConstructor(String.class);
                //从文件中读出属性值
                method.invoke(obj,conn.newInstance(getClassName(className,fields[i].getName())));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }

    //获得类
    private String getClassName(String ClassName){
        HashMap<String,String> map = getKey().get(ClassName);
        if(map==null){
            return null;
        }else{
            return map.get(ClassName);
        }
    }
    
    //获得属性值
    private String getClassName(String ClassName,String FieldName){
        return getKey().get(ClassName).get(FieldName);
    }
    
    private static HashMap<String,HashMap<String,String>> getKey()  {
        HashMap<String,HashMap<String,String>> map= new HashMap<String,HashMap<String,String>>();
        //{person3,{person3,day01.Person},
        //{sex,男},
        //{name,王五},
        //{age,18}}
        try {
            SAXReader saxr = new SAXReader();
            Document doc = (Document) saxr.read(new File("./src/main/resources/Spring.xml"));
            Element root = doc.getRootElement();
            List<Element> list = root.elements();
            for (Element element : list) {
                //属性
                String className = element.attributeValue("name");
                String clazzName = element.attributeValue("class");
                List<Element> elements =  element.elements();
                HashMap<String,String> map1 = new HashMap<String, String>();
                map1.put(className,clazzName);
                for (Element e:elements
                     ) {
                    String name = e.attributeValue("name");
                    String value = e.attributeValue("value");
                    map1.put(name, value);
                }
                map.put(className,map1);
            }
        } catch (Exception e) {
        }
        return map;
    }
}

配置文件Spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<Spring>
    <bean name="person1" class="day01.Person">
        <Field name="name" value="张三"/>
        <Field name="age" value="16"/>
        <Field name="sex" value="男"/>
    </bean>
    <bean name="person2" class="day01.Person">
        <Field name="name" value="李四"/>
        <Field name="age" value="17"/>
        <Field name="sex" value="女"/>
    </bean>
    <bean name="person3" class="day01.Person">
        <Field name="name" value="王五"/>
        <Field name="age" value="18"/>
        <Field name="sex" value="男"/>
    </bean>
</Spring>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值