想通过反射机制创建对象
方法一:
import java.util.Properties;
public class BeanFactory {
private static Properties properties;
public static HelloDao getDao(){
String value = properties.getProperty("helloDao");
// System.out.println(value);
//value就是全类名,通过全类名可以使用反射创建对象
try {
Class clazz = Class.forName(value);
Object object = clazz.getConstructor(null).newInstance(null);
return object;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return null;
}
}
-
Class clazz = Class.forName(value);
这一行代码首先使用
Class.forName
方法,根据一个字符串value
中包含的类名来获取对应类的Class
对象。Class
对象包含了有关类的元信息,允许您在运行时检查和操作类。例如,如果
value
的值是一个类的全限定名(包括包名的类名),比如"com.example.MyClass"
,那么上述代码将加载并返回该类的Class
对象,使您可以在运行时操作该类。 -
Object object = clazz.getConstructor(null).newInstance(null);
这一行代码使用了
clazz
变量,该变量包含了上一行代码中获取的类的Class
对象。在这里,它执行以下操作:-
clazz.getConstructor(null)
:通过clazz
获取该类的无参构造函数(构造器),getConstructor
方法接受一个参数,用于指定构造函数的参数类型,因此传入null
表示获取无参构造函数。 -
newInstance(null)
:使用获取到的无参构造函数创建该类的实例。这个方法会调用类的无参构造函数来初始化对象,并返回一个新创建的对象。
最终,将新创建的对象赋值给
Object
类型的变量object
。由于Object
是所有类的基类,因此可以用它来引用任何类的对象。 -