Spring.NET 1.3:VS.NET Solution Templates、MSTest 支持及 Spring Integration.NET

阅读数:1870 2010 年 2 月 15 日

话题:.NET语言 & 开发架构

近日Spring.NET Framework 1.3发布了。InfoQ 有幸采访了 Spring.NET 项目的创建者与领导Mark Pollack以深入了解此次发布及其所带来的新特性,同时还谈到了新的Spring Integration.NET项目。

Pollack 说此次发布有四大新特性:

  1. 集成微软测试框架——正如现有的对NUnit的支持一样,Spring.NET 现在可以对微软测试框架中的类进行依赖注入与事务管理。
  2. TIBCO EMS 支持——Spring.NET 增加了几个类以提升生产率,为TIBCO EMS 消息提供了基于 Plain Old C# Object(POCO)的编程模型,这与 Spring 对 Java JMS 的支持是一样的,还补充了对现有的 ActiveMQ 和 MSMQ 的支持。
  3. 增强的 NVelocity 支持——极大地简化了对 NVelocity 引擎的配置。
  4. Visual Studio.NET Solution Templates——为 VS.NET 2008 增加了 Spring.NET 支持以及 ADO.NET、NHibernate 应用程序库和 Spring Web 应用的支持,此外还增加了 ReSharper 的类型完成与模板支持。

读者可以查阅完整的文档变化列表。虽说 Spring 1.3 可以直接替换掉以前的版本,但对于那些使用了其内部 API 的开发者来说还是需要注意某些变化

Pollack 详细介绍了 VS.NET Solution Templates,每个模板都提供了几个项目,其中包含了一个“主”业务逻辑项目和测试项目;同时每个解决方案都提供了样板配置文件以帮助使用者尽快上手 Spring.NET。ReSharper 模板简化了很多常见的编码与配置工作,比如 Bean 类型完成以及为 Bean 定义增加属性等。

Pollack 还对 Spring.NET 与其他.NET 框架进行了一番比较:

  • 不仅仅是个 DI 容器——虽然 Spring.NET 常被拿来与其他的 DI 容器如Castle等进行比较,但准确地说,Spring.NET 是个应用框架,因为它具有丰富的 API,可以用在整个应用中,如数据访问、Web 开发和集成测试等等。
  • ASP.NET 框架——Spring.NET ASP.NET 框架并不是基于 ASP.NET MVC 的,它最大的好处是提升了生产率:新用户在探索 DI 和 Spring.NET 时常常会寻求某个 ASP.NET 框架。
  • 面向消息的中间件集成——与Apache ActiveMQ、TIBCO EMS 及MSMQ的集成简化了使用这些框架的工作量,这是通过抽取出低层析的线程安全问题并使用基于 POCO 的编程模型实现的。
  • 面向方面的编程(AOP)——Spring.NET 提供了一个可扩展的AOP 框架,该框架包含了如切入点(pointcut)通知(advice)等概念,同时还提供了易于使用的通知实现,如日志异常转换参数验证缓存自动化的重试(retry)等等。
  • ADO.NET 程序库——ADO.NET 辅助程序库抽取并简化了 ADO.NET 的数据源操作,这是通过削减大量的样板代码并提供了基于模板的编程模型实现的。
  • 表达式语言——Spring.NET 提供了一个表达式语言,可在运行期查询并操纵对象图。
  • 集成测试——支持集成测试以简化数据访问等操作。
  • 模块化——将特性分布在不同的 DLL中,这样开发者就可以选取自己所需要的 DLL 而无需使用整个框架。
  • 企业支持——Spring.NET 由SpringSource前不久被 VMWare 收购)出品。由于有了大公司的支持,这样那些想要使用 Spring.NET 的公司无疑吃了个定心丸。
  • 计划中的基于代码的容器配置——目前的 Spring.NET 只支持基于 XML 的配置,而 Castle 则支持 XML 和“类型映射”风格的 API 两种方式。在下一版中,Spring.NET 将提供类似于Spring JavaConfig(已融合到了Spring 3.0中)的基于代码的配置方式。

读者可以浏览丰富的Spring.NET 文档和为数众多的示例应用来学习 Spring.NET。

在被问到对 Spring.NET 的未来打算时,Pollack 说到:

我们计划继续开发 Spring.NET 2.0 并根据用户的反馈向其他领域进军。Kenneth Xu 创建的 Spring Threading for .NET 已经取得了长足的进步。在 Java“util.concurrent”包的鼓舞下,现在已经出现了很多线程辅助库,比如说客户化线程池、PriorityQueues、IFuture<T> 以及其他超出“util.concurrent”包的程序库,这是.NET 4.0 Parallel 类在.NET 2.0 中的一个实现。众多的贡献者还在致力于开发.NET 版本的 Spring Security,由 Andreas Dohring 领衔的 Spring Integration for .NET 也取得了巨大的进步。

Spring.NET 2.0 最重要的一个特性就是为 DI 容器提供基于代码的配置。更加通用的做法则是将核心 DI 容器与最近发布的 Spring Java 3.0 同步起来,同时提供一种基于属性(attribute)的方式来配置 DI 以及更多地使用 Spring API 所提供的泛型,这大部分都是 Spring 内部所采取的做法。其他领域就是 ASP.NET MVC 集成(至少对于 DI 来说)以及提升对基于 Spring.NET 应用操作的监控与管理。可用于 Visual Studio 中的工具是个普遍需求,但我们还不打算实现这个功能。我们正致力于简化 Spring.NET 和 Spring Java 应用之间的交互,这种交互应能够跨越各种分布式技术,如消息、Web Services 和 REST。

我们将在今年的第一和第二季度发布里程碑与 RC 版,之后就将发布正式版。Spring.NET 与 Spring Java 代码基结构上的相似性使得我们能够很容易(虽然还是很耗时间的)地增加新特性并进行重构。此次采访还提及了 Spring Integration.NET:

我们在该领域上所关注的内容与 Spring Java 项目是一样的,即提供一种编程模型以支持常见的企业集成模式,比如 Channel、Router、Filter、Splitter、 Aggregator 及 Transformer 等。Spring Integration.NET 提供了一种嵌入式消息总线,可用在 Spring 应用中并通过适配器与外部系统集成。与 Spring 一样,Spring Integration.NET 也提供了一个基于 POCO 的编程模型以简化可维护、可测试代码的编写工作。最初版本中所提供的适配器与当前的Spring Integration 1.0.3 一样,比如文件、消息、邮件和 Web Services 等。然而我们还会提供更多特定于.NET 的适配器,比如 Windows Event Log 和 WCF P2P 通道。在首个版本发布后,我们将增加更多特定于.NET 框架的特性,如 lambda 表达式、扩展方法一级.NET 4.0 所提供的特性等。

请参看InfoQ 对 Mark Pollack 的采访以更多地了解 Spring.NET 1.3 和 2.0。

查看英文原文:Spring.NET 1.3: VS.NET Solution Templates, MSTest Support and Spring Integration.NET