Spring的IOC实现原理:反射+工厂模式具体分析
Posted 尚墨1111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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实现机制
以上是关于Spring的IOC实现原理:反射+工厂模式具体分析的主要内容,如果未能解决你的问题,请参考以下文章