前言
最近发现很多程序员朋友包括我自己在内,工作几年后依然对Spring的理解只是 IOC 和 AOP,原因大家都知道(面试官爱问),然而实际上对 Spring 并没有深入的理解。
今天涉及知识点:
-
Spring 解决了什么问题
-
Spring 整体架构
-
Spring 组件
-
简单WEB-SSM项目的Spring依赖
一. Spring 解决了什么问题
- Spring 作为主流的 Java EE 解决方案,它最核心的作用应该是整合。
- Spring 框架主要优势是分层架构和组件化设计,分层架构允许用户选择使用需要的组件,并通过 Java Beans 管理应用程序中的组件。
- 支持声明式事务管理,通过RMI或Web服务远程访问逻辑代码,以及持久化数据的操作
二. Spring 整体架构

三. Spring 组件
组成 Spring 框架的每个模块都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
1. Core Container :
-
spring-core
: 提供 Spring 框架的基本功能,包括 IOC 和 DI 功能。 -
spring-beans
:核心容器的主要组件是 BeanFactory,它是工厂模式的经典实现,Spring 将管理对象称为 Bean。BeanFactory 通过 IOC 将应用程序的依赖配置与实际的应用程序代码分离。 -
spring-context
:是一个配置文件,向 Spring框架提供上下文信息。建立在Core和 Beans 模块的基础上,它是访问和配置任何对象的媒介,通过类似于JNDI注册表(注册名与对象的映射)的方式访问对象。
ApplicationContext
接口是上下文模块的焦点。通过分析它继承的接口,看看它实现了哪些功能
public interface ApplicationContext extends
EnvironmentCapable, //获取Environment实例,即具备读取环境信息功能
ListableBeanFactory, //获取容器中 Bean 信息
HierarchicalBeanFactory, //父子级联IOC容器的接口,子容器可以通过接口方法访问父容器的bean
MessageSource, //国际化接口
ApplicationEventPublisher, //事件发布接口
ResourcePatternResolver //资源解析
{
@Nullable
String getId();
String getApplicationName();
String getDisplayName();
long getStartupDate();
@Nullable
ApplicationContext getParent();
AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
}
spring-context-support
提供将通用第三方库集成到Spring-context
的支持,包括缓存(EhCache,Guava,JCache),邮件(JavaMail),调度(CommonJ,Quartz)和模板引擎(FreeMarker,JasperReports,Velocity),如下图:

-
spring-expression
: 是运行时查询和操作对象图的强大的表达式语言
2. AOP and Instrumentation :
-
spring-aop
:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。 -
spring-aspects
:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。 -
spring-instrument
:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。如spring-instrument-tomcat
模块包含Spring的Tomcat的检测代理。
3. Messaging :
-
spring-messaging
:为集成messaging api和消息协议提供支持,其中base定义了消息Message
(MessageHeader和body)、消息处理MessageHandler
、发送消息MessageChannel
。该模块还包括一组注释,用于将消息映射到方法,类似于基于Spring MVC注释的编程模型。
4. Data Access/Integration :
-
spring-jdbc
:提供了JDBC抽象层,无需进行繁琐的JDBC编码和数据库供应商特定错误代码的解析。 -
spring-tx
:支持对实现特殊接口的类以及所有POJO进行编程和声明式事务管理。 -
spring-orm
:为流行的object-relational mapping
API(包括JPA
,JDO
和Hibernate
提供了集成层 。使用该spring-orm
模块,可以将所有这些Object/XML mapping
框架与Spring提供的所有其他功能结合使用,例如前面提到的简单的声明式事务管理功能。 -
spring-oxm
:提供了一个抽象层,该抽象层支持Object/XML mapping
实现,例如JAXB,Castor,XMLBeans,JiBX和XStream。 -
spring-jms
:Java Messaging Service
包含用于生成和使用消息的功能。从Spring Framework 4.1开始,它提供了与spring-messaging
模块的集成 。
5. WEB :
-
spring-web
:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IoC 容器初始化以及 Web 应用上下文。 -
spring-webmvc
:也称Web-Servlet
,包含Spring的model-view-controller(MVC)和针对Web应用程序的REST Web Services实现。Spring的MVC框架在域模型代码和Web表单之间提供了清晰的分隔,并与Spring框架的所有其他功能集成在一起。 -
spring-webmvc-portlet
:也称Web-Portlet
,提供要在Portlet环境中使用的MVC实现。
6. Test :
-
spring-test
模块支持Spring组件与JUnit或TestNG的单元测试和集成测试。它提供了Spring 的一致加载ApplicationContext
和这些上下文的缓存。它还提供了可用于单独测试代码的模拟对象。
四. WEB-SSM项目的Spring依赖
依赖关系图如下:

pom依赖:
885.2.12.RELEASE3.4.6org.springframeworkspring-webmvc${spring.version}org.springframeworkspring-jdbc${spring.version}org.mybatismybatis-spring1.3.2org.mybatismybatis${mybatis.version}mysqlmysql-connector-java5.1.45com.alibabadruid1.0.20org.springframeworkspring-core${spring.version}org.springframeworkspring-beans${spring.version}org.springframeworkspring-context${spring.version}org.springframeworkspring-jdbc${spring.version}org.springframeworkspring-tx${spring.version}org.springframeworkspring-web${spring.version}org.springframeworkspring-webmvc${spring.version}org.springframeworkspring-test${spring.version}org.mybatismybatis-spring1.3.2org.mybatismybatis${mybatis.version}mysqlmysql-connector-java5.1.45com.alibabadruid1.0.20jstljstl1.2com.fasterxml.jackson.corejackson-databind2.9.5javax.servletjavax.servlet-api3.1.0
ok,今天的内容就分享到这里了,欢迎留言指正,谢谢大家!
————————– 期待您的点赞三连 ————————
————————– 期待您的点赞三连 ————————
————————– 期待您的点赞三连 ————————
参考资料
- Spring框架参考文档