天天看點

通過反射擷取類的執行個體

import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.Properties;

public class ClassLoaderFactory {

public ClassLoaderFactory() {

super();

}

public static Object loadClassByMethod(String methodName, String className,

Properties pro) {

Class c = null;

try {

c = Class.forName(className);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Method method = null;

try {

method = c.getMethod(methodName, new Class[] { Properties.class });// 方法參數的類型為:Properties

} catch (SecurityException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Object o = null;

try {

// o=method.invoke(c,null);

o = method.invoke(c, new Object[] { pro });// 方法參數的值為:pro

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return o;

}

public static Object loadClassByMethod(String methodName, String className) {

Class c = null;

try {

c = Class.forName(className);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Method method = null;

try {

method = c.getMethod(methodName, new Class[] { });

} catch (SecurityException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Object o = null;

try {

//o=method.invoke(c,null);

o=method.invoke(c,new Object[] { });

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return o;

}

//public static Object loadClassByConstructor(String className, Properties pro) {

public static Object loadClassByConstructor(String className, String beanId) {

Class c = null;

try {

//c = Class.forName(pro.getProperty(className));

c = Class.forName(className);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Constructor ct = null;

try {

//ct = c.getConstructor(new Class[] { Properties.class });// 構造方法的參數類型為:Properties

ct = c.getConstructor(new Class[] { String.class });

} catch (SecurityException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Object o = null;

try {

//o = ct.newInstance(new Object[] { pro });// 構造方法的參數值為:Properties

o = ct.newInstance(new Object[] { beanId });

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return o;

}

public static Object loadClass(String className) {

Class c = null;

try {

c = Class.forName(className);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Object o = null;

try {

o = c.newInstance();

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return o;

}

}