SPRING.NET 1.3.2 学习25--自定义对象的行为

Spring.NET通过几个专门的接口来控制容器中对象的行为,这些接口包括Spring.NET定义的IInitializingObject接口和标准的System.IDisposable接口。容器会在实现了这两个接口的对象上调用AfterPropertyiesSet()方法和Dispose()方法,这样我们就有机会在对象初始化和销毁时做一些额外的工作

IInitializingObject接口和init-method属性

Spring.Objects.Factory.IInitializingObject接口允许容器在完成对象的属性设置之后执行对象的初始化工作。该接口只有一个方法:

  • void AfterPropertiesSet():在对象的所有属性被设置之后由容器调用。在该方法中,我们可以检查必需的属性是否都已被正确设值,或者可以执行进一步的初始化工作。此方法可以抛出任何异常以标识配置错误、初始化失败等情况。

[Note]注意

一般来说,尽量不要使用IInitializingObject接口。因为在对象定义中可以通过init-method属性来指定初始化方法。

<object id="exampleInitObject" type="Examples.ExampleObject" init-method="init"/>
[C#]
public class ExampleObject
{
    public void Init()
    {
        // do some initialization work
    }
}

和下面的方法是一样的...

<object id="exampleInitObject" type="Examples.AnotherExampleObject"/>
[C#]
public class AnotherExampleObject : IInitializingObject
{
    public void AfterPropertiesSet()
    {
        // do some initialization work
    }
}

但在使用init-method时,无需对Spring.NET产生依赖。

[Note]注意

在布署prototype模式的对象时,容器无法处理对象的生命周期事件。Spring.NET不可能仅通过对象定义来完全控制非singleton/原型对象的生存期。对象一旦创建就会交付给客户代码,容器不再保存其引用。对于Spring.NET来说,非singleton对象就如同使用new操作符一样,所有与对象生命周期有关的工作都应该由客户代码来处理。

IDisposable接口和destroy-method属性

System.IDisposable接口使我们有机会在容器被销毁时,通过对象的回调方法来处理容器中对象的销毁工作。该接口只有一个方法:

  • void Dispose():当容器被销毁时调用。在此可释放对象保留的任何资源(比如数据库连接)。可在此方法中抛出任何异常,但是此处抛出的任何异常都不会阻止容器的销毁,只会被记录到日志中。

[Note]注意

由于在对象定义中(XML或数据库中)可以通过destroy-method来指定对象的清理方法,所以在使用Spring.NET时,可以不去实现IDisposable接口。

<object id="exampleInitObject" type="Examples.ExampleObject" destroy-method="cleanup"/>
[C#]
public class ExampleObject
{
    public void cleanup()
    {
        // do some destruction work (such as closing any open connection (s))
    }
}

和下面的方式完全相同:

<object id="exampleInitObject" type="Examples.AnotherExampleObject"/>
[C#]
public class AnotherExampleObject : IDisposable
{
    public void Dispose()
    {
        // do some destruction work
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值