IOC概念
控制反转(Inversion of Control ),是一个重要的面向对象编程法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。
反射:
依赖注入(Dependency Injection):
ICoreDbSession dbSession=CallContext.GetData("Dbsession") as ICoreDbsession;
if (dbSession==null){
dbSession=SpringHelper.GetObject<ICoreDbSession>("DBSession");//拿到了容器封装的上下文ContextRegistry.GetContext()
CallContext.SetData("DbSession",dbSession);
}
配置文件:
<object id="DBSession" type="ITOO.FreshNewReport.DAL.DBSession,ITOO.FreshNewReport.DAL" singleton="false">
<property name="StudentManageDals" ref="StudentManageDals">
</object>
<object id="StudentManageDals" type="ITOO.FreshNewReport.DAL.StudentManageDals,ITOO.FreshNewReport.DAL" singleton="false">
依赖查找(Dependency Lookup):
IFamilyInfoBll FamilyInfoBll=SpringHelper.GetObject<IFamilyInfoBll >("FamilyInfoBll")
IOC优缺点:
好处:
把对象生成放在了xml里面定义,更换子类很方便,实现热插拔。
缺点:
1.生成类的步骤变多了
2.生成对象在效率上有损耗
3.缺少IDE重构的操作支持,要手动修改类
我的个人理解:
IOC容器,就是在程序运行的时候,首先读取配置文件中的<object>中的关于IOC的代码,实例化出IOC中给出的类型、具体的类;然后在B层,或者WCF层,都可以将具体的类强转成接口,来完成类的实例化。
依赖注入:
可以注入自己想要的属性,容器提供回调接口和上下文条件给组件。把符合依赖关系的对象通过JavaBean属性或者构造函数传递给对象。
依赖查找:
可以通过查找的方法查找自己实例化的类。通过容器提供的API来查找资源与协作对象。