The Spring (http://www.springsource.org) is a powerful and rich framework made for to building solid Java-based enterprise solutions. From the first touch you will notice that evert part of the Spring Framework is extremely configurable. It allows focusing on the application-level business logic, without unnecessary ties to specific deployment environments.
The Spring Framework includes several subproject that gives you flexible way of choosing the right tools for you development. Among them you will find:
Spring Security, Spring Integration, Spring Batch, Spring Data, Spring Web Flow, Spring Web Services, Spring Mobile, Spring Social, Spring Android.
Spring enables you to build applications from “plain old Java objects” (POJOs) and to apply enterprise services non-invasively to POJOs. This capability applies to the Java SE programming model and to full and partial Java EE.
One of the strong sides of the Spring Framework is Inversion of Control (IoC) component, that addresses object dependencies problem by providing a formalized means of composing disparate components into a fully working application ready for use. The Spring Framework codifies formalized design patterns as first-class objects that you can integrate into your own application(s).
On the other side the Aspect Oriented Programming (AOP) is by definition “An approach to programming that attempts the separation of concerns, specifically cross-cutting concerns, as an advance in modularization.” Here, the key point is separation of concerns. Concern is another term for a module of an application, where module refers to a functionality of the application.
Spring’s AOP module provides an AOP Alliance-compliant aspect-oriented programming implementation allowing you to define, for example, method-interceptors and pointcuts to cleanly decouple code that implements functionality that should be separated. Using source-level metadata functionality, you can also incorporate behavioral information into your code, in a manner similar to that of .NET attributes.