通過反射機制加載類驅動和建立類實作:
配置檔案内容<檔案名:properties.properties>:
person=entity.PersonInstanceTest
接口:
package iInterface;
public interface IPerson {
public void setAge(int age);
public void setName(String name);
public void setAddress(String address);
public int getAge();
public String getName();
public String getAddress();
public String sayHello(String name);
public String sayGoodBye(String name);
}
接口實作類:
package entity;
import iInterface.IPerson;
public class PersonInstanceTest implements IPerson{
private int age;
private String name;
private String address;
public PersonInstanceTest() {
System.out.println("--對象被執行個體化啦!--");
}
public PersonInstanceTest(int age,String name,String address){
this.age = age;
this.name = name;
this.address = address;
}
@Override
public int getAge() {
return 0;
}
@Override
public String getName() {
return null;
}
@Override
public String getAddress() {
return null;
}
@Override
public String sayHello(String name) {
// TODO Auto-generated method stub
return null;
}
@Override
public String sayGoodBye(String name) {
return null;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "age: " + age + " name: " + name + " address: " + address;
}
}
建立類實作工具類:
package reflect;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Properties;
public class ClassReflect {
private static Properties props;
//采用靜态語句塊:類加載便會執行
static{
props = new Properties();
try {
String path = "src" + File.separator + "file" + File.separator + "properties.properties";
props.load(new FileInputStream(path));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//調用類無參構造器
public static Object createInstance(Object className)
throws ClassNotFoundException, InstantiationException,
IllegalAccessException, IllegalArgumentException,
SecurityException, InvocationTargetException,
NoSuchMethodException{
String object = (String) props.get(className);
Class<?> cls = Class.forName(object);
return cls.getConstructor().newInstance();
}
//調用有參構造器
public static Object createInstance(Object className,Class<?>[] parameterTypes,Object[] initargs) throws Exception{
String object = (String) props.get(className);
Class<?> cls = Class.forName(object);
return cls.getConstructor(parameterTypes).newInstance(initargs);
}
}
調用不同參數構造器測試類:
package reflect;
import org.junit.Test;
import iInterface.IPerson;
public class ClassInstanceTest {
//調用無參構造器
//@Test
public void test1(){
try {
IPerson person = (IPerson) ClassReflect.createInstance("person");
person.setName("beyond0851");
person.setAge(100);
person.setAddress("hello");
System.out.println(person.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//根據參數類型不同,調用有參構造器
@Test
public void test2(){
try {
IPerson person = (IPerson) ClassReflect.createInstance("person",
new Class[]{int.class,String.class,String.class},
new Object[]{90,"beyond0851","love記記"});
System.out.println(person.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}