标签:spring-ioc
传统的实现:
IOC的实现:
<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="config://spring/objects" />
</context>
<objects xmlns="http://www.springframework.net">
<object id="BidSystemEntities" type="LFBidSystem.Model.BidSystemEntities,LFBidSystem.Model" singleton="false" />
<!--DbSession层的的注解-->
<object id="DBSession" type="LFBidSystem.DAL.DbSession,LFBidSystem.DAL" singleton="false">
<!--加入属性注入,指向D层的注入-->
<property name="T_BidDAL" ref="T_BidDal"/>
</object>
<!--D层的的注解-->
<object id="T_BidDal" type="LFBidSystem.DAL.T_BidDal,LFBidSystem.DAL" singleton="false" />
</objects>
</spring>
SpringHelper.GetObject<ICoreDbSession>("DBSession");
SpringHelper是在项目中封装的一个类。
在上面的配置文件中,展示了创建对象和给对象的属性赋值的方式。
这里要强调以下内容:
产生对象的方式不同,决定了对象什么时候创建出来,这就是下面我们要介绍的。
这里参考了Java中的SpringIOC的执行流程。
但是,也有特殊情况,当我们在配置文件中配置对象,并设置为”Singleton=false”时,对象的初始化过程会延迟到我们获取该对象时,即调用GetObject方法时,才实例化。
这也就是当我们在项目中执行以下这行代码时:
dbSession = SpringHelper.GetObject<ICoreDbSession>("DBSession");
程序获取DBSession这个类的实例化对象,会根据配置文件中的属性注入给DBSession中每个属性赋值。而给每个属性赋的值是具体的DAL层中一个类的实例,所以紧接着就会调用每个DAL的构造函数。而每个D层类的构造函数中会调用SetDbContext()这个方法,所以当你的DbSession中有多少个属性,就会执行多少遍的SetDbContext()方法。
public partial class DbSession : IDbSession
{
public IT_BidDal T_BidDAL { get; set; }
}
}
IOC作为第三方来维护对象间的依赖关系,解除了对象间的耦合,让我们的项目架构又灵活了些。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:spring-ioc
原文地址:http://blog.csdn.net/u010924834/article/details/47112709