Spring是为了构建企业应用的轻量级框架。然而,Spring是模块化的,容许你只是使用其中的一部分,不须要引入其余的。你能够在任何web框架上使用IoC容器,也能够只使用Hibernate集成代码或JDBC抽象层。Spring框架支持声明式事务管理、经过RMI远程访问、WebService和持久化数据。它还提供全功能的MVC框架,和将AOP应用到你的系统上。html
Spring设计为非侵入式的,意味着你的逻辑代码不依赖与框架自己。程序员
学习Spring看这个文档就没错。web
注意JDK版本要求:spring
Spring是应用于Java平台的,使用它可让你更专一于你的代码。数据库
作为一个程序员,你能够在Spring中得到如下好处:express
一个Java应用程序,对象间每每是相互依赖的。apache
Spring框架的控制反转(Inversion of Control)就是为了解决这个问题的。编程
Spring大约分为20个模块,这些模块分为核心容器、数据访问/集成、Web、AOP、Instrumentation、消息和测试,以下图所示:api
核心容器由spring-core
、spring-beans
、spring-context
、spring-context
和spring-expression
5个模块构成。数组
spring-core
和spring-beans
模块为框架提供最基本的功能,包括IoC和依赖注入。BeanFactory
是一个工厂的实现类。它能够免除用户手动建立单例类而且对象之间解耦。
context(spring-core
)模块基于spring-beans
和BeanFactory
两个模块,容许以框架方式访问对象,这相似于JNDI。Context模块继承了Beans模块,并支持国际化、事件传播、资源加载等。Context模块支持Java EE特性,如EJB、JMX、远程访问。spring-context
接口是Contet模块的重点。spring-context-support
提供将第三方库集成到Spring的功能,如缓存(EhCache,JCache)和任务调度(CommonJ,Quartz)等。
spring-expression
模块提供强有力的在运行时查询和操做对象的语言。这种语言支持获取和设置属性、方法执行、获取数组或集合中的对象、逻辑计算、命名变量,在Spring的IoC容器中得到对象。
spring-aop
模块提供切面编程的实现。能够自定义方法拦截和切入点。
spring-aspects
模块提供与AspectJ的集成。
spring-instrument
模块为特定的服务器提供类加载服务。spring-instrument
模块是集成了Tomcat。
Spring4提供了spring-messaging
模块,主要类有Message
,MessageChannel
,MessageHandler
。这个模块还包含一些映射消息到方法的注解,相似于Spring MVC基于编程模式的注解。
这一层由JDBC、ORM、OXM、JMS、和事物模块组成。
spring-jdbc
模块,主要为了解决数据库繁多的问题,应用此可不须要关注使用的数据库。
spring-tx
模块提供编程式或声明式事务处理。
spring-orm
模块提供流行的对象关系映射的APIs,包含JPA和Hibernate.
spring-oxm
模块提供对Object/XML映射的支持,例如JAXB,Castor,JiBX和XStream。
spring-jms
模块(Java消息服务)包含生成和消费消息的功能。在Spring4.1之后,它集成了spring-messaging
模块。
Web层包含spring-web
、spring-webmvc
和spring-websocket
3个模块。
spring-web
模块提供面向Web方法的集成特性,例如多部分文件上传、经过监听初始化IoC容器和面向Web的Context,还包含HTTP客户端和对远程的支持。
spring-webmvc
模块(也被称做Web-Servlet模块)包含Spring MVC框架。
spring-websocket
模块提供对socket的全面支持。
spring-test
模块经过JUnit或者TestNG来对Spring的模块进行单元测试和集成测试。它提供一致的Spring 的ApplicationContexts
和context的缓存。它还提供mock对象让你测试你的代码。
Spring能够应用在大部分场景和各类企业级应用。
依赖管理和依赖注入是不一样的东西。为了应用好的特性(好比依赖注入)到你的程序中,你须要添加全部必须的jar包。依赖关系能够是直接的或者是间接的(例如个人应用依赖于commons-dbcp
,而它又依赖于ApplicationContexts
)。间接依赖是传递的,因此很是难以管理。
为了方便的使用Spring,Spring已经尽可能的减小依赖和进行模块化,若是你不打算写一个Web应用那么就不须要引入spring-web模块。为了方便表明Spring的jar包,之后使用spring-*
或spring-*.jar
来代替,*
为不一样的模块(例如,spring-core
,spring-webmvc
,spring-jms
),可是实际的jar包会有相应的版本信息(例如,spring-core-5.0.0.BUILD-SNAPSHOT.jar
)。
每个版本的Spring将发布在Maven中心,格式为spring-*-<version>.jar
,Maven的坐标为org.springframework。
因此首先你应该决定怎么去管理你的依赖,咱们建议使用自动化管理工具例如Maven,Gradle或者Ivy,固然你也能够下载后手动管理。
如下是Spring的全部jar包。
GroupId | ArtifactId | 描述 |
---|---|---|
org.springframework |
spring-aop |
基于代理的AOP支持 |
org.springframework |
spring-aspects |
基于AspectJ 的切面编程 |
org.springframework |
spring-beans |
Beans的支持, 包括 Groovy |
org.springframework |
spring-context |
应用程序运行时上下文,包括调度和远程抽象 |
org.springframework |
spring-context-support |
提供第三方库到Spring的支持 |
org.springframework |
spring-core |
核心工具类,被其余模块使用 |
org.springframework |
spring-expression |
Spring 表达式语言 (SpEL) |
org.springframework |
spring-instrument |
代理JVM相关的 |
org.springframework |
spring-instrument-tomcat |
Tomcat的插件 |
org.springframework |
spring-jdbc |
提供jdbc的支持,包括数据源和JDBC访问 |
org.springframework |
spring-jms |
JMS支持包,包括接收和发送消息类的支持 |
org.springframework |
spring-messaging |
对消息传递体系结构和协议的支持 |
org.springframework |
spring-orm |
对象/关系 映射, 拨快对JPA 和 Hibernate的支持 |
org.springframework |
spring-oxm |
对象/XML 映射的支持 |
org.springframework |
spring-test |
对Spring组件单元测试和集成测试的支持 |
org.springframework |
spring-tx |
事物支持,包块DAO支持和JCA集成 |
org.springframework |
spring-web |
Web 支持,包括客户端和Web访问 |
org.springframework |
spring-webmvc |
一个MVC框架 |
org.springframework |
spring-websocket |
WebSocket 和SockJS 的实现,包括对STOMP的支持 |
一个Maven的依赖以下:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.0.BUILD-SNAPSHOT</version> <scope>runtime</scope> </dependency> </dependencies>
若是你不须要编译Spring APIs能够声明做用域为runtime。
Maven坐标查询能够在http://mvnrepository.com/网站查询到。
最新稳定版为4.3.3.RELEASE
,建议使用这个版本。
上面是用的Maven仓库,固然也可使用Spring的Maven仓库,只须要指定仓库地址便可,以下:
<repositories> <repository> <id>io.spring.repo.maven.release</id> <url>http://repo.spring.io/release/</url> <snapshots><enabled>false</enabled></snapshots> </repository> </repositories>
为了防止下载不一样版本的Spring,能够引入spring-framework-bom
到你的dependencyManagement
中,这能够确保你的全部Spring会使用同一个版本。
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-framework-bom</artifactId> <version>5.0.0.BUILD-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
那么之后增长Spring模块的时候就不须要再指定<version>
标签了:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <dependencies>
日志是很是重要的。由于如今日志框架特别多,因此选择变得很困难。
在Spring中强制使用的是Jakarta Commons Logging API (JCL),在Spring中也显示的使用了JCL。对有全部的模块使用相同的日志框架是很是重要的,Spring是这么作的,让spring-core
模块显示的依赖commons-logging
,而其余模块则是在编译时依赖。
若是不想使用commons-logging
而想使用其余日志门面(例如slf4j),能够这么作:
spring-core
模块中排除对commons-logging
的依赖(只有这个模块明确依赖commons-logging
)排除指定的日志框架以下:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.0.0.BUILD-SNAPSHOT</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
如今应用程序应该不能正常工做了,由于没有指定一个日志框架,下面将使用slf4j来代替。
slf4j是一个好的日志门面框架,比commons-logging
性能要高。而且是在编译时绑定。
下面的例子展现了使用slf4j日志门面框架,并使用log4j具体日志框架的例子:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.0.0.BUILD-SNAPSHOT</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.5.8</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.5.8</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.8</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> </dependencies>
若是你就想使用log4j,也不须要上面那么负责的依赖,能够简单的使用以下例子便可:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.0.0.BUILD-SNAPSHOT</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> </dependencies>
再给出一个简单的log4j.properties例子:
log4j.rootCategory=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n
log4j.category.org.springframework.beans.factory=DEBUG
文档目录详见:http://www.cnblogs.com/yiwangzhibujian/p/5893219.html
这是翻译的Spring文档的第一部分,若是看过原文应该能够看出这个翻译是很简略的,尤为是在大段文本的翻译上,可是重点部分仍是不会省略的,我这么作的目的是不想把时间和精力放在那些文本语言的推敲上,而是以程序员的思惟提取重点部分,就像文档一开始的JDK版本要求,就是随意加上的,原文没有,可是我以为比较重要。这样会比较相对快一点翻译完这个文档,等之后有时间在慢慢作修补工做。