今天,我在查看Tomcat源代码。在Bootstrap.init()方法中,我发现它使用反射创建了org.apache.catalina.startup.Catalina的实例,并使用invoke()设置ClassLoader。如下所示的代码:
我发现许多框架即便可以确定类和方法,仍然使用反射创建实例。
就像上面的代码一样,使用
那么还有必要使用反射吗?
Class<?> startupClass = catalinaLoader.loadClass("org.apache.catalina.startup.Catalina");
Object startupInstance = startupClass.getConstructor().newInstance();
String methodName = "setParentClassLoader";
Method method =
startupInstance.getClass().getMethod(methodName, paramTypes);
method.invoke(startupInstance, paramValues);
我发现许多框架即便可以确定类和方法,仍然使用反射创建实例。
就像上面的代码一样,使用
String
来确定目标。那么还有必要使用反射吗?