java反射之根据全类名创建对象    现在的需求是根据类的全名。来创建对象
package 中介者设计模式;
import java.util.Date;
public class CreateObject {
public static void main(String[] args) {
Object obj = createInstance("java.util.Date");
System.out.println(obj);
Date d = createInstance(Date.class);
System.out.println(d);
}
//提供⼀个⽅法,根据传⼊的参数全名创建⼀个对象并且返回
public static Object createInstance(String className){
try {
Class clz = Class.forName(className);
Object obj = wInstance();
return obj;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/
/重载的⽅法(这个⽅法还是没有解决问题)
public static <T> T createInstance(Class<T> clz){
try {
wInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//传递⼀个类的全新类名来调⽤对象,将上述两种⽅案进⾏合体
public static  <T> T createInstance(Class<T> checkType,String className){
try {
Class<T> clz = (Class<T>)Class.forName(className);
Object obj = wInstance();
//需要检查checkType是不是obj的字节码对象
java反射的作用及应用场景if (!checkType.isInstance(obj)) {
throw new Exception("对象跟字节码不兼容");
}
return (T)obj;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
      Spring也是这样做的。我们把公⽤的代码封装到⼀个⼯具类中,就可以了。
package 中介者设计模式;
//对象⼯⼚
public class BeanFactory {
//传递⼀个类的全新类名来调⽤对象,将上述两种⽅案进⾏合体
public static  <T> T getBean(Class<T> checkType,String className){
try {
Class<T> clz = (Class<T>)Class.forName(className);
Object obj = wInstance();
//需要检查checkType是不是obj的字节码对象
if (!checkType.isInstance(obj)) {
throw new Exception("对象跟字节码不兼容");
}
return (T)obj;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
  ⼤家都知道⼯⼚的设计模式是单例的设计模式:
    单例的设计模式写法有好⼏种形式⽐如1:枚举⽅法创建⼯⼚射进模式     
package 中介者设计模式;
//对象⼯⼚
public enum BeanFactory {
//传递⼀个类的全新类名来调⽤对象,将上述两种⽅案进⾏合体
INSTANCE;
public  <T> T getBean(Class<T> checkType,String className){
try {
Class<T> clz = (Class<T>)Class.forName(className);
Object obj = wInstance();
//需要检查checkType是不是obj的字节码对象
if (!checkType.isInstance(obj)) {
throw new Exception("对象跟字节码不兼容");
}
return (T)obj;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
外界是怎么调⽤这个⽅法那,Bean();就⾏了是不是很简便啊。