2.16 模拟Spring IOC容器功能-1
2.17 模拟Spring IOC容器功能-2
什么是IOC?
- 控制反转,把对象创建和对象之间的调用过程交给Spring框架进行管理
- 使用IOC的目的:为了耦合度降低
解释:
模仿 IOC容器的功能,我们利用 Map 集合存放需要的对象,并新建一个 conf.properties 文件存放信息,在获取 对象之前解析 ioc.properties 文件中的信息,利用反射技术将 conf.properties 文件中的内容通过 Class.forName 的形式解析为 Class 对象放入集合 map 中,这样每次获取对象都会从 map 中进行获取,不需要再 new
Ioc.properties类:
clazz1=cn.edu.xync.myweb.reflect.Person
clazz2=cn.edu.xync.myweb.reflect.Teacher
IOCContainer类:
package cn.edu.xync.myweb.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class IOCContainer {
//用来存放配置文件读取通过反射所创建的对象
private Map container=new HashMap();
public void init() {//读取配置文件
InputStream is=IOCContainer.class.getClassLoader().getResourceAsStream("ioc.properties");//通过当前类的字节码加载器去读取ioc.proper服务器托管ties文件,以InputStream类型保存
Properties p=new Properties();
try {
p.load(is);//加载文件
Set propertyNames=p.stringPropertyNames();//返回配置文件中所有属性的名称
Iterator its=propertyNames.iterator();//迭代器遍历
while(its.hasNext()) {
String key=its.next();
String value=p.getProperty(key);//通过key值拿到value,拿到value的目的时通过反射创建对象
//通过反射创建出对象后,添加到Map中
container.put(key,Class.forName(value).newInstance());//通过无参数的构造方法以反射形式创建对象
}
}
catch (InstantiationException e) {
System.err.println("通过配置文件创建对象错误,请检查类完整的包路径名称和类名称是否正确");
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
System.err.println("读取配置文件错误,请检查文件名称或者路径是否正确");
e.printStackTrace();
}
}
public void showElements() {
Set keys=container.keySet();//得到Map中所有key组成的Set
Iterator its=keys.iterator();
while(its.hasNext()) {
String key=its.next();
Object value=container.get(key);
System.out.println("key:"+key+",value:"+value);
}
}
public static void main(String[] args) {
I服务器托管OCContainer con=new IOCContainer();
con.init();//初始化容器
con.showElements();
}
}
运行结果:
总结:
通过简单的模拟ioc容器功能,再次理解ioc容器,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制,对于spring框架来说,就是由Spring来负责控制对象的生命周期和对象间的关系。
错误:
原因:is这个输入流是空的。加载器没有读取到我的配置文件,因为我没有将ioc.properties放在src根目录文件中,导致读取不到。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: Spire.PDF for .NET【文档操作】演示:查找并删除 PDF 中的空白页
PDF 中的空白页并不罕见,因为它们可能是作者故意留下的或在操作文档时意外添加的。当您阅读或打印文档时,这些空白页可能会很烦人,因此可能非常有必要将其删除。在本文中,您将了解如何使用Spire.PDF for .NET以编程方式查找和删除 PDF 文档中的空白…