Spring那么流行,为啥呢?Spring的优点主要是啥呢?

在知乎中有这么一个回答,我觉得不错。知乎链接

最重要的优点主要是Ioc(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)了。

Spring Framework是一个很大的框架,包括很多部分,从官方文档(4.1.4)上来看,有如下几个部分:
spring结构

1. Core Container

核心容器包含spring-core,spring-beans,spring-context,spring-context-support和spring-expression。

1.1 spring-core和spring-beans模块

spring-core和spring-beans模块提供了框架最基本的组成部分,包括了IoC和DI特性。BeanFactory是工厂模式的一个精妙的实现,它消除了程序性单例的需要,并且解耦了配置和具体逻辑的依赖。

1.2 spring-context和spring-context-support

spring-context模块构建在spring-core和spring-beans提供的牢靠基础之上。它提供了一种类似于JNDI注册的框架式的访问对象的方法。该模块继承了Beans的特性,并且加入了国际化的支持(比如资源bundle),事件传播,资源加载,context的透明创建比如使用Servlet容器。该模块还提供了支持Java EE的一些特性,比如EJB,JMX和基本的远程功能。ApplicationContext接口是该模块的焦点。spring-conetxt-support提供了集成第三方库到Spring应用中的支持,比如缓存(EhCache,Guava,JCache),邮件(JavaMail),调度(CommonJ,Quartz)和模板引擎(FreeMaker,JasperReports,Velocity)。

1.3 spring-expression

spring-expression模块提供了一种强大的表达式语言,用来在运行时查询和维护一个对象图。它是在JSP 2.1中指定的标准表达式语言的一种扩展。该语言支持设置和获取属性值,属性赋值,方法调用,获取数组、集合和索引的内容,逻辑和算术操作符,命名变量,根据名字在Spring IoC容器中进行检索。它还可以像普通的列表一样,进行映射和选择。

2. AOP and instrumentation

2.1 spring-aop

spring-aop模块提供了一套AOP联盟推荐的的基于面向切面编程的实现,允许你进行一些定义比如方法拦截器,同时可以干净的切入,解耦那些应该分离的功能实现。就像.NET中的属性那样做一样,你可以使用源码级别的元数据功能,往代码中添加一些行为信息。

2.2 spring-aspects

单独的spring-aspects模块提供了与AspectJ的集成。

2.3 spring-instrument

spring-instrument模块提供了类插装(class instrumentation)的支持和类加载器(classloader)的实现,可以用于某些应用服务器中。

2.4 spring-instrument-tomcat

spring-instrument-tomcat包含了Tomcat的spring插装代理。

3. Messaging

3.1 spring-messaging

Spring Framework 4包含了spring-messaging模块,这个模块包含了在Spring integration项目中提取出的关键抽象,比如Message,MessageChannel,MessageHandler,以及其他用来构建基于消息的应用的抽象。这个模块还包含了一些将消息映射为方法的注解,类似于Spring MVC中的注解。

4. Data Access/Integration

该数据访问和集成层包含了JDBC,ORM,JMS和事务。

4.1 spring-jdbc

该模块提供了JDBC抽象层,不需要写那些冗长的JDBC代码,解析数据库厂商特定的错误码。

4.2 spring-tx

该模块支持从特定接口继承的类和所有的POJO类的编程式和声明式事务管理。

4.3 spring-orm

该模块提供了流行ORM框架的集成层,比如JPA,JDO和Hibernate。你可以使用该模块集成这些ORM框架,并且使用其他Spring提供的特性,比如前面提到的简单的声明式事务管理。

4.4 spring-oxm

该模块提供抽象层来支持Object/XML映射实现,比如JAXB,Castor,XMLBeans,JiBX和XStream。

4.5 spring-jms

该模块提供了JMS中生产者和消费者消息的特性。从Spring框架4.1开始,它提供同spring-messaging模块的集成。

5. Web

5.1 spring-web

该模块提供了基本的Web特性集成,比如文件断点上传功能,使用Servlet监听器初始化IoC容器和Web应用上下文。它还提供了一个HTTP客户端和Spring远程功能中的Web相关部分。

5.2 spring-webmvc

该模块也叫Web-Servlet模块,包含了Spring的MVC模型和REST网络服务。Spring MVC框架提供了一种简洁的方法将领域模型编码和Web控件进行分离,同时还可以集成Spring框架的其他所有特性。

5.3 spring-webmvc-portlet

该模块也叫Web-Protlet模块,提供了在Protlet环境中使用的MVC实现,反映了spring-webmvc模块的功能。

6. Test

6.1 spring-test

spring-test模块支持使用JUnit和TestNG对Spring模块进行单元测试和集成测试。它提供了一致的方法,来加载和缓存Spring应用上下文(ApplicationContext)。它还提供了模拟对象(mock objects),你可以用来在隔离环境下测试你的代码。

标签: Java, Spring

添加新评论