Spring IoC 的实现原理

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这个类已经连接了。

你可能感兴趣的:(Spring IoC 的实现原理)