Spring.NET provides comprehensive infrastructural support for developing enterprise .NET applications.  It allows you to remove incidental complexity when using the base class libraries makes best practices, such as test driven development, easy practices.  Spring.NET is created, supported and sustained by SpringSource.

The design of Spring.NET is based on the Java version of the Spring Framework, which has shown real-world benefits and is used in thousands of enterprise applications world wide.  Spring .NET is not a quick port from the Java version, but rather a 'spiritual port' based on following proven  architectural and design patterns in that are not tied to a particular platform. 

The breath of functionality in Spring .NET spans application tiers which allows you to treat it as a ‘one stop shop’ but that is not required.  Spring .NET is not an all-or-nothing solution.  You can use the functionality in its modules independently.

Spring.NET consists of the following modules. Click on the module name for more information.

Spring.Core – Use this module to configure your application using Dependency Injection.   

Spring.Aop – Use this module to perform Aspect-Oriented Programming (AOP).  AOP centralizes common functionality that can then be declaratively applied across your application in a targeted manner.   An aspect library provides predefined easy to use aspects for transactions, logging, performance monitoring, caching, method retry, and exception handling.

Spring.Data – Use this module to achieve greater efficiency and consistency in writing data access functionality in ADO.NET and to perform declarative transaction management.

Spring.Data.NHibernate – Use this module to integrate NHibernate with Spring’s declarative transaction management functionality allowing easy mixing of ADO.NET and NHibernate operations within the same transaction. NHibernate 1.0 users will benefit from ease of use APIs to perform data access operations.

Spring.Web – Use this module to raise the level of abstraction when writing ASP.NET web applications allowing you to effectively address common pain-points in ASP.NET such as data binding, validation, and ASP.NET page/control/module/provider configuration.

Spring.Web.Extensions – Use this module to easily expose a plain .NET object (PONO), that is one that doesn't have any attributes or special base classes, as a web service, configured via dependency injection, 'decorated' by applying AOP, and then exposed to client side java script.

Spring.Services – Use this module to adapt plain .NET objects so they can be used with a specific distributed communication technology, such as .NET Remoting, Enterprise Services, ASMX Web Services, and WCF services.  These services can be configured via dependency injection and ‘decorated’ by applying AOP.

Spring.Testing.NUnit - Use this module to perform integration testing with NUnit.

Spring.Testing.Microsoft - Use this module to perform integration testing with Microsoft test framework (MSTEST).

Spring.Messaging - Use this module to increase your productivity creating Microsoft Message Queue (MSMQ) applications that adhere to architectural best practices

Spring.Messaging.Nms - Use this module to increase your productivity creating Apache ActiveMQ applications that adhere to architectural best practices.

Spring.Messaging.Ems - Use this module to increase your productivity creating TIBCO EMS applications that adhere to architectural best practices.

Spring.Scheduling.Quartz - Provides integration with the Quartz.NET job scheduler providing declarative configuration of Quartz jobs, schedulers, and triggers as well as several convenience classes to increase productivity when creating job scheduling applications.

Spring.Template.Velocity - Helper classes to configure a NVelocity template engine in a Spring based application.

Additional Functionality in Spring.Core

The Spring.Core module also includes the following additional features the you may find useful in their own right.
  • Expression Language - provides efficient querying and manipulation of an object graphs at runtime.  
  • Validation Framework - a robust UI agnostic framework for creating complex validation rules for business objects either programmatically or declaratively.
  • Data binding Framework - a UI agnostic framework for performing data binding.
  • Dynamic Reflection - provides a high performance reflection API.
  • Threading - provides additional concurrency abstractions such as Latch, Semaphore and Thread Local Storage.
  • Resource abstraction - provides a common interface to treat the InputStream from a file and from a URL in a polymorphic and protocol-independent manner.