zoukankan      html  css  js  c++  java
  • Spring中文文档-第一部分

    一、 Spring 框架概述

      Spring是为了构建企业应用的轻量级框架。然而,Spring是模块化的,允许你只是使用其中的一部分,不需要引入其他的。你可以在任何web框架上使用IoC容器,也可以只使用Hibernate集成代码或JDBC抽象层。Spring框架支持声明式事务管理、通过RMI远程访问、WebService和持久化数据。它还提供全功能的MVC框架,和将AOP应用到你的系统上。

      Spring设计为非侵入式的,意味着你的逻辑代码不依赖与框架本身。

    1. 开始使用Spring

      学习Spring看这个文档就没错。

      注意JDK版本要求:

    • JDK 6+ for Spring Framework 4.x
    • JDK 5+ for Spring Framework 3.x

    2. Spring框架介绍

      Spring是应用于Java平台的,使用它可以让你更专注于你的代码。

      做为一个程序员,你可以在Spring中获得以下好处:

    • 不使用事务APIs写代码就让一个方法有事务处理功能
    • 不使用remote APIs就可以让本地方法访问远程程序
    • 不使用JMX APIs就可以让一个本地方法管理操作
    • 不使用JMS APIs就可以让本地代码处理消息

    2.1 依赖注入和控制反转(IoC)

      一个Java应用程序,对象间往往是相互依赖的。

      Spring框架的控制反转(Inversion of Control)就是为了解决这个问题的。

    2.2 各模块

      Spring大约分为20个模块,这些模块分为核心容器、数据访问/集成、Web、AOP、Instrumentation、消息和测试,如下图所示:

    2.2.1 核心容器

      核心容器由spring-corespring-beansspring-contextspring-contextspring-expression 5个模块构成。

      spring-corespring-beans模块为框架提供最基本的功能,包括IoC和依赖注入。BeanFactory是一个工厂的实现类。它可以免除用户手动创建单例类并且对象之间解耦。

      context(spring-core)模块基于spring-beansBeanFactory两个模块,允许以框架方式访问对象,这类似于JNDI。Context模块继承了Beans模块,并支持国际化、事件传播、资源加载等。Context模块支持Java EE特性,如EJB、JMX、远程访问。spring-context接口是Contet模块的重点。spring-context-support提供将第三方库集成到Spring的功能,如缓存(EhCache,JCache)和任务调度(CommonJ,Quartz)等。

      spring-expression模块提供强有力的在运行时查询和操作对象的语言。这种语言支持获取和设置属性、方法执行、获取数组或集合中的对象、逻辑计算、命名变量,在Spring的IoC容器中获得对象。

    2.2.2 AOP 和 Instrumentation

      spring-aop模块提供切面编程的实现。可以自定义方法拦截和切入点。

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

      spring-instrument模块为特定的服务器提供类加载服务。spring-instrument模块是集成了Tomcat。

    2.2.3 消息

      Spring4提供了spring-messaging模块,主要类有MessageMessageChannelMessageHandler。这个模块还包含一些映射消息到方法的注解,类似于Spring MVC基于编程模式的注解。

    2.2.4 数据访问/集成

      这一层由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模块。

    2.2.5 Web

      Web层包含spring-webspring-webmvcspring-websocket 3个模块。

      spring-web模块提供面向Web方法的集成特性,例如多部分文件上传、通过监听初始化IoC容器和面向Web的Context,还包含HTTP客户端和对远程的支持。

      spring-webmvc模块(也被称作Web-Servlet模块)包含Spring MVC框架。

      spring-websocket模块提供对socket的全面支持。

    2.2.6 测试

      spring-test模块通过JUnit或者TestNG来对Spring的模块进行单元测试和集成测试。它提供一致的Spring 的ApplicationContexts 和context的缓存。它还提供mock对象让你测试你的代码。

    2.3 使用场景

      Spring可以应用在大部分场景和各种企业级应用。

    2.3.1 依赖管理和命名约定

      依赖管理和依赖注入是不同的东西。为了应用好的特性(比如依赖注入)到你的程序中,你需要添加所有必须的jar包。依赖关系可以是直接的或者是间接的(例如我的应用依赖于commons-dbcp,而它又依赖于ApplicationContexts)。间接依赖是传递的,所以非常难以管理。

      为了方便的使用Spring,Spring已经尽量的减少依赖和进行模块化,如果你不打算写一个Web应用那么就不需要引入spring-web模块。为了方便代表Spring的jar包,以后使用spring-*spring-*.jar来代替,*为不同的模块(例如,spring-corespring-webmvcspring-jms),但是实际的jar包会有相应的版本信息(例如,spring-core-5.0.0.BUILD-SNAPSHOT.jar)。

      每一个版本的Spring将发布在Maven中心,格式为spring-*-<version>.jar,Maven的坐标为org.springframework。

      所以首先你应该决定怎么去管理你的依赖,我们建议使用自动化管理工具例如Maven,Gradle或者Ivy,当然你也可以下载后手动管理。

      以下是Spring的所有jar包。

    GroupIdArtifactId描述

    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>

    2.3.2 日志记录

      日志是非常重要的。因为现在日志框架特别多,所以选择变得很困难。

      在Spring中强制使用的是Jakarta Commons Logging API (JCL),在Spring中也显示的使用了JCL。对有所有的模块使用相同的日志框架是非常重要的,Spring是这么做的,让spring-core模块显示的依赖commons-logging,而其他模块则是在编译时依赖。

    2.3.2.1 不使用Commons Logging

      如果不想使用commons-logging而想使用其他日志门面(例如slf4j),可以这么做:

    1. spring-core模块中排除对commons-logging的依赖(只有这个模块明确依赖commons-logging
    2. 依赖一个特殊的日志门面框架

      排除指定的日志框架如下:

    <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来代替。

    2.3.2.2 使用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>

    2.3.2.3 使用log4j

      如果你就想使用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版本要求,就是随意加上的,原文没有,但是我觉得比较重要。这样会比较相对快一点翻译完这个文档,等以后有时间在慢慢做修补工作。

  • 相关阅读:
    CentOS 7中为Yum设置代理
    在 .NET Core项目中使用UEditor图片、文件上传服务
    Android开发:通过 webview 将网页打包成安卓应用
    ElasticSearch:组合查询或复合查询
    ElasticSearch:常用的基础查询与过滤器
    SpringBoot:Java High Level REST Client 搜索 API
    SpingBoot:整合Elasticsearch7.2.0
    Linux:oracle11.2.0dbca静默建库
    Docker:跨主机通信
    Mysql无法启动情况下,如何恢复数据?
  • 原文地址:https://www.cnblogs.com/yiwangzhibujian/p/5897204.html
Copyright © 2011-2022 走看看