分析创建对象的细节
创建对象时无参构造是否执行?
在User的无参构造增加控制台输出
public User(){
System.out.println("无参构造被调用了");
}
控制台输出:
无参构造被调用了
add.....
结论:对象的无参构造会被执行
不使用new方式,还能如何创建对象?
-
反射
-
加载bean.xml配置文件
-
对xml文件进行解析操作
-
获取xml文件的bean标签属性值(id和class)
-
使用反射根据类全路径创建对象
//通过反射创建对象 @Test public void Test2() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { //获取class对象 Class tempClass=Class.forName("User"); //创建对象 // Object o = tempClass.newInstance();//已经过时了 User user = (User)tempClass.getDeclaredConstructor().newInstance(); //使用对象 user.add(); }
控制台输出:
无参构造被调用了 add.....
-
创建的对象被放在哪?
将创建的对象放到Map集合中,其中包含对象的唯一标识和类的定义(描述信息)
Map<String, BeanDefinition> beanDefinitionMap
//key:唯一标识
//value:类的定义