类加载器的使用

/**
 * 容器工具:保存开发中使用的对象.前提需要在配置文件中配置.
 */
public class MySpring {
    //使用集合保存开发中常用的对象.键是对象的名字(自己起)值是对象本身.
    private  static  Map<String,Object> beans = new HashMap<>()
    //静态代码块中的代码只在类加载的时候运行一次.
    static {
        try {
            //加载配置文件
            InputStream is = ClassLoader.getSystemResourceAsStream("bean.properties");
            Properties properties = new Properties();
            properties.load(is);
            //遍历配置文件中的数据.
            Set<Map.Entry<Object, Object>> entries = properties.entrySet();
            for (Map.Entry<Object, Object> entry : entries) {
                //entry的真实数据:classname1=com.itheima.myclass2.Student
                String className = (String) entry.getValue();//获取全类名   -- 反射创建对象
                Class clazz = Class.forName(className);//获取字节码
                Constructor constructor = clazz.getDeclaredConstructor();//获取空参构造
                constructor.setAccessible(true);//暴力反射
                Object obj = constructor.newInstance();//创建对象
                String[] split = className.split("\\.");//分割全类名----为了获取类名当做键存入map集合.
                beans.put(split[split.length-1],obj);//把对象存入集合
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 根据键可以返回一个对应的对象供用户使用.
     * @param name
     * @return
     */
    public static Object getBean(String name){
        return  beans.get(name);
    }
}
===========================================================
public class TestSpring {
    public static void main(String[] args) {
        Object s = MySpring.getBean("Student");
        Object t = MySpring.getBean("Teacher");
        Object w = MySpring.getBean("Worker");
        System.out.println(s);
        System.out.println(t);
        System.out.println(w);
    }
}
======================================================
public class Student {
}
======================================================
public class Teacher {
}
======================================================
public class Worker {
}
======================================================
bean.properties
classname1=com.itheima.test11.Student
classname2=com.itheima.test11.Teacher
classname3=com.itheima.test11.Worker

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最好的期待,未来可期

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值