interface Fruit {
public abstract void eat();
}
class Apple implements Fruit {
public void eat(){
System.out.println("Apple");
}
}
class Orange implements Fruit {
public void eat(){
System.out.println("Orange");
}
}
class Factory {
public static Fruit getInstance(String ClassName) {
Fruit f=null;
try {
f=(Fruit)Class.forName(ClassName).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
class Client {
public static void main(String[] a) {
Fruit f=Factory.getInstance("io.github.dunwu.spring.Orange");
if(f!=null){
f.eat();
}
}
}
Class.forName(className):传入className返回与给定的字符串名称相关联类或接口的Class类。
Java中工厂模式经常使用newInstance()方法来创建对象。Class.forName("").newInstance()返回的是对象
Spring 中的 IoC 的实现原理就是工厂模式加反射机制。
从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:
1这个类已经加载
2这个类已经连接了。