南京高端网站开发,一个网站开发的权限,手机网站被禁止访问怎么打开网页,乐清网站制作优化2.16 模拟Spring IOC容器功能-1
2.17 模拟Spring IOC容器功能-2 什么是IOC#xff1f;
控制反转#xff0c;把对象创建和对象之间的调用过程交给Spring框架进行管理使用IOC的目的#xff1a;为了耦合度降低 解释#xff1a;
模仿 IOC容器的功能#xff0c;我们利用 Map…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类
clazz1cn.edu.xync.myweb.reflect.Person
clazz2cn.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 MapString,Object containernew HashMapString,Object();public void init() {//读取配置文件InputStream isIOCContainer.class.getClassLoader().getResourceAsStream(ioc.properties);//通过当前类的字节码加载器去读取ioc.properties文件以InputStream类型保存Properties pnew Properties();try {p.load(is);//加载文件SetString propertyNamesp.stringPropertyNames();//返回配置文件中所有属性的名称IteratorString itspropertyNames.iterator();//迭代器遍历while(its.hasNext()) {String keyits.next();String valuep.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 blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e) {System.err.println(读取配置文件错误请检查文件名称或者路径是否正确);e.printStackTrace();}}public void showElements() {SetString keyscontainer.keySet();//得到Map中所有key组成的SetIteratorString itskeys.iterator();while(its.hasNext()) {String keyits.next();Object valuecontainer.get(key);System.out.println(key:key,value:value);}}public static void main(String[] args) {IOCContainer connew IOCContainer();con.init();//初始化容器con.showElements();}
}运行结果 总结
通过简单的模拟ioc容器功能再次理解ioc容器即“控制反转”不是什么技术而是一种设计思想。在Java开发中Ioc意味着将你设计好的对象交给容器控制而不是传统的在你的对象内部直接控制对于spring框架来说就是由Spring来负责控制对象的生命周期和对象间的关系。 错误 原因is这个输入流是空的。加载器没有读取到我的配置文件因为我没有将ioc.properties放在src根目录文件中导致读取不到。