spring学习之spring框架介绍
开始spring
如果你是刚使用spring的开发人员,可以先使用spring-boot来创建一个spring应用。他基于spring框架。主张约定优于配置。被设计成为尽可能快的运行。
参考代码及文档
快速学习spring指南
学习建立一个符合restful规范的web应用
spring框架的介绍
spring框架是一个java平台项目,他为java应用提供了基础架构支持。因此可以让开发者更加的专注与自己的应用项目。
可以从spring得到的帮助
- 使一个java方法在数据库中执行事务,而不必处理任何的事务API
- 使一个java方法在调用rpc远程调用时,而不必处理远程相关的API
- 使一个java方法在本地管理操作,处理JMX API的
- 使一个java方法的消息处理程序,不用使用jms消息的API
依赖注入和控制反转
spring认为,java的编写更加的偏向底层,对于企业应用程序比较薄弱。尽管java提供了丰富的应用功能,但是缺乏架构师和开发人员将java中诸多基础模块,组成一个连贯的整体。尽管你可以使用诸多的设计模式来完善你的项目。
但是spring的框架IOC组件,通过提供不同的组成成分为准备使用一个完全工作的应用程序手段解决这个问题,spring编写完善的设计模式可以集成到自己的项目中。很多组织和机构使用spring框架,来健壮自己的应用。
模块
spring包含20个模块,包含,代码容器,数据连接,web服务,aop切面,消息等。
spring框架运行时
核心容器
包含:spring-core,spring-beans,spring-context,spring-context-support,spring-expression。
spring-core,spring-beans提供spring的基础部分。包含IOC的依赖注入,BeanFactory是一个实现了复杂工厂模式。允许你从程序逻辑分离出依赖关系的配置。
spring-context是spring的上下文环境。事件程序,加载资源都是由上下文加载并创建上下文。
spring-expression提供了一个强大的表达式语言。
AOP的介绍
定义了一个切面,并允许你来自定义这个功能,举个例子,方法之前要执行的切面方法应该和业务方法是分开的。
spring-aspects提供了和aspectJ的整合
消息
spring-messageing提供了一个基础的消息应用。
数据接入
spring-jdbc提供了简单的数据链接
spring-tx提供了数据库的声明式事务控制处理
spring-oxm提供了对象或者映射方式的处理
spring-jms提供兼容java消息系统
web
spring-web 提供了基本面向web的功能,例如多文件上传,ioc初始化。servlet监听器,面向web应用的上下文,包含http服务,rpc服务等。
spring-webmvc 模型,视图,控制器的实现,restful web应用的实现,
spring-websocket
应用场景
典型的完整spring应用
使用第三方框架的spring应用
rpc调用使用场景
包装现有对象类
依赖管理和命名约定
增加maven依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.0.BUILD-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
</dependencies>
使用spring的中央仓库
<repositories>
<repository>
<id>io.spring.repo.maven.release</id>
<url>http://repo.spring.io/release/</url>
<snapshots><enabled>false</enabled></snapshots>
</repository>
</repositories>
使用配置管理中指定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的依赖包都不需要在指定版本号
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependencies>
gradle的配置
repositories {
mavenCentral()
// and optionally...
maven { url "http://repo.spring.io/release" }
}
dependencies {
compile("org.springframework:spring-context:5.0.0.BUILD-SNAPSHOT")
testCompile("org.springframework:spring-test:5.0.0.BUILD-SNAPSHOT")
}
日志
spring默认日志是commons-logging
禁用commons-loggin这样写
<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
<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://docs.spring.io/spring/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/