在<>中讲到Spring IOC。现在来分析IOC(inverse of control,翻译控制反转,具体的理解见上篇blog的分析)。IOC在某种程度上极大地降低了程序之间的耦合性。那它是如何做到的呢?
我们知道在配置文件中定义bean,问题来了,简单的字符串的定义信息,如何实例化对象的呢?
在JAVA中有一个反射(Reflect)的东东,反射是什么,就是它不是原来本身的东西,是反射过来的(水面成像-->映像),通过水面倒影就知道你长什么样子了。在医学上的X光,看看你身体内部的情况如何。
我们一般在使用对象时,先new一个具体的类,现在把类的信息都写在配置文件中,反射简单言之,可以通过一个类名就可以生成一个对象,然后来操作其方法。
写一个例子来体会下:
package com.oracle;
public class Demo {
public void show(){
System.out.println("I am showing...");
}
}
package com.oracle;
public class ReflectionDemo {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class reflectdemo=null;
reflectdemo =Class.forName("com.oracle.Demo");//bean 的信息不也是字符串吗
Demo d=(Demo)reflectdemo.newInstance(); //与普通的new不一样。
d.show();
}
}
反射的本质是:所有的成员和方法都由相应的Class信息,否则系统无法来检测和控制。
还有一个问题,我们在getBean()是传递一个beanid字符串,那么它是如何来实现的,其实是工厂方法。这样做的目的是隔离效果。
工厂里有很多的bean,每个bean有它的唯一标识,现在你传什么标识,我就返回对应的bean对象。
以上是IOC的实现基础。
我们知道在配置文件中定义bean,问题来了,简单的字符串的定义信息,如何实例化对象的呢?
在JAVA中有一个反射(Reflect)的东东,反射是什么,就是它不是原来本身的东西,是反射过来的(水面成像-->映像),通过水面倒影就知道你长什么样子了。在医学上的X光,看看你身体内部的情况如何。
我们一般在使用对象时,先new一个具体的类,现在把类的信息都写在配置文件中,反射简单言之,可以通过一个类名就可以生成一个对象,然后来操作其方法。
写一个例子来体会下:
package com.oracle;
public class Demo {
public void show(){
System.out.println("I am showing...");
}
}
package com.oracle;
public class ReflectionDemo {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class reflectdemo=null;
reflectdemo =Class.forName("com.oracle.Demo");//bean 的信息不也是字符串吗
Demo d=(Demo)reflectdemo.newInstance(); //与普通的new不一样。
d.show();
}
}
反射的本质是:所有的成员和方法都由相应的Class信息,否则系统无法来检测和控制。
工厂里有很多的bean,每个bean有它的唯一标识,现在你传什么标识,我就返回对应的bean对象。
以上是IOC的实现基础。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30024515/viewspace-1365747/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30024515/viewspace-1365747/