Spring的IOC实现原理:反射+工厂模式具体分析

感谢文章:IOC的实现原理—反射与工厂模式的结合

1. 反射

.java文件在编译后会变成.class文件,这就像是个镜面,本身是.java,在镜中是.class,他们其实是一样的;
那么同理,我们看到镜子的反射是.class,就能通过反编译,了解到.java文件的本来面目——这就是反射

2. 工厂模式

2.1 普通工厂模式:

将接口的实现类直接写死在内部,根据传入的String不同,判断之后生成对应的实现类。
缺点:
实现类增加了,工厂类也要修改
有多少实现类,工厂里面也要写多少实现类

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 fruitName){  
         fruit f=null;  
         if("Apple".equals(fruitName)){  
             f=new Apple();  
         }  
         if("Orange".equals(fruitName)){  
             f=new Orange();  
         }  
         return f;  
     }  
}  
class hello{  
     public static void main(String[] a){  
         fruit f=Factory.getInstance("Orange");  
         f.eat();  
     }  
}  
2.2 反射实现工厂类

只是通过反射的方式,直接将需要的实现类的名字映射到工厂内部
工厂内部不再需要写入具体的实现类
不需要修改工厂的判断。

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 hello{  
    public static void main(String[] a){  
        fruit f=Factory.getInstance("Reflect.Apple");  //包名.类名的路径
        if(f!=null){  
            f.eat();  
        }  
    }  
}  
2.3 反射+配置文件 = Spring IOC实现机制
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值