The Spring framework is the leading full-stack J2EE /JAVA application framework. Not like other applications, Spring does not expose itself on the design of a project due to its modular property and, it has been break logically into independent packages, which may function independently. It gives a light weight container and a non-invasive programming model enabled by the need of AOP (Aspect Oriented Programming), dependency injection, and portable service abstractions.
It adds abstraction layers for persistence, transactions frameworks, Web development, a JDBC integration framework, an AOP integration framework, Web Services, email support etc. It also gives integration modules for popular Object-to-Relational (O/R) mapping tools like JDO, Hibernate etc. The designers of an application may feel free to use just a few Spring packages and go out the rest. The other spring packages may be used into an existing application in a part manner. Spring is based on complements OOP (Object Oriented Programming) and also the IoC pattern with AOP (Aspect Oriented Programming). You do not use AOP if you do not need to and AOP complements Spring IoC to give a better middleware solution.