Spring
Features
Dependency Injection (DI)
The technology that Spring is most identified with is the Dependency Injection (DI) flavor of Inversion of Control. The Inversion of Control (IoC) is a general concept, and it can be expressed in many different ways. Dependency Injection is merely one concrete example of Inversion of Control.
When writing a complex Java application, application classes should be as independent as possible of other Java classes to increase the possibility to reuse these classes and to test independently of other classes while unit testing. Dependency Injection helps in gluing these classes together and at the same time keeping them independent.
What is dependency injection exactly? Let's look at these two words separately. Here the dependency part translates into an association between two classes. For example, class A is dependent of class B. Now, let's look at the second part, injection. All this means is, class B will get injected into class A by the IoC.
Dependency injection can happen in the way of passing parameters to the constructor or by post-construction using setter methods. Dependency Injection is the heart of Spring Framework.
Aspect Oriented Programming (AOP)
One of the key components of Spring is the Aspect Oriented Programming (AOP) framework. The functions that span multiple points of an application are called cross-cutting concerns and these cross-cutting concerns are conceptually separate from the application's business logic. There are various common good examples of aspects including logging, declarative transactions, security, caching, etc.
The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect.
The AOP module of Spring Framework provides an aspect-oriented programming implementation allowing you to define method-interceptors and pointcuts to cleanly decouple code that implements functionality that should be separated. We will discuss more about Spring AOP concepts in a separate chapter.
DI helps to decouple your application objects from each other (对象之间)
AOP helps to decouple cross-cutting concerns from the objects that they affect (cross-cutting concerns 与其影响的对象)
Architecture

Spring is modular, allowing you to pick and choose which modules are applicable to you, without having to bring in the rest.
The Spring Framework provides about 20 modules which can be used based on an application requirement.
Core Container
The Core Container consists of the Core, Beans, Context, and Expression Language modules the details of which are as follows:
The
Coremodule provides the fundamental parts of the framework, including the IoC and Dependency Injection features.The
Beanmodule providesBeanFactory, which is a sophisticated implementation of the factory pattern.The
Contextmodule builds on the solid base provided by theCoreandBeansmodules and it is a medium to access any objects defined and configured. TheApplicationContextinterface is the focal point of the Context module.The
SpELmodule provides a powerful expression language for querying and manipulating an object graph at runtime.
Data Access/Integration
The Data Access/Integration layer consists of the JDBC, ORM, OXM, JMS and Transaction modules whose detail is as follows:
The
JDBCmodule provides a JDBC-abstraction layer that removes the need for tedious JDBC related coding.The
ORMmodule provides integration layers for popular object-relational mapping APIs, including JPA, JDO, Hibernate, and iBatis.The
OXMmodule provides an abstraction layer that supports Object/XML mapping implementations for JAXB, Castor, XMLBeans, JiBX and XStream.The Java Messaging Service
JMSmodule contains features for producing and consuming messages.The
Transactionmodule supports programmatic and declarative transaction management for classes that implement special interfaces and for all your POJOs.
Web
The Web layer consists of the Web, Web-MVC, Web-Socket, and Web-Portlet modules the details of which are as follows:
The
Webmodule provides basic web-oriented integration features such as multipart file-upload functionality and the initialization of the IoC container using servlet listeners and a web-oriented application context.The
Web-MVCmodule contains Spring's Model-View-Controller (MVC) implementation for web applications.The
Web-Socketmodule provides support for WebSocket-based, two-way communication between the client and the server in web applications.The
Web-Portletmodule provides the MVC implementation to be used in a portlet environment and mirrors the functionality ofWeb-Servletmodule.
Miscellaneous
There are few other important modules like AOP, Aspects, Instrumentation, Messaging and Test modules the details of which are as follows:
The AOP module provides an aspect-oriented programming implementation allowing you to define method-interceptors and pointcuts to cleanly decouple code that implements functionality that should be separated.
The Aspects module provides integration with AspectJ, which is again a powerful and mature AOP framework.
The Instrumentation module provides class instrumentation support and class loader implementations to be used in certain application servers.
The Messaging module provides support for STOMP as the WebSocket sub-protocol to use in applications. It also supports an annotation programming model for routing and processing STOMP messages from WebSocket clients.
The Test module supports the testing of Spring components with JUnit or TestNG frameworks.
Last updated
