/**
* 容器工具:保存开发中使用的对象.前提需要在配置文件中配置.
*/
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
类加载器的使用
最新推荐文章于 2024-08-10 17:22:35 发布