

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 适用于 Java 的 AWS SDK 1.x 和 2.x 有什么区别
<a name="migration-whats-different"></a>

本节介绍将应用程序从使用 1.x 版本转换为 2.x 适用于 Java 的 AWS SDK 版本时需要注意的主要更改。

## 软件包名称更改
<a name="mig-diff-package-name-change"></a>

从 SDK for Java 1.x 到 SDK for Java 2.x 的一个明显变化是软件包名称的更改。软件包名称在 SDK 2.x 中以 `software.amazon.awssdk` 开头，而 SDK 1.x 则使用 `com.amazonaws`。

这些名称区分了 SDK 1.x 与 SDK 2.x 的 Maven 构件。SDK 2.x 的 Maven 构件使用 `software.amazon.awssdk` groupId，而 SDK 1.x 使用 `com.amazonaws` groupId。

有些时候，您的代码会要求项目具有 `com.amazonaws` 依赖项，而该项目原本只使用 SDK 2.x 构件。这方面的一个例子是使用服务器端 AWS Lambda。本指南前面的[设置 Apache Maven 项目](setup-project-maven.md#modules-dependencies)部分对此进行了介绍。

**注意**  
SDK 1.x 中的几个软件包名称包含 `v2`。在这种情况下，使用 `v2` 通常表示软件包中的代码旨在与相关服务的版本 2 配合使用。  
由于软件包的完整名称以 `com.amazonaws` 开头，因此这些是 SDK 1.x 组件。SDK 1.x 中这些软件包名称的示例有：  
`com.amazonaws.services.dynamodbv2`
`com.amazonaws.retry.v2`
`com.amazonaws.services.apigatewayv2`
`com.amazonaws.services.simpleemailv2`

## 将版本 2.x 添加到您的项目
<a name="adding-v2"></a>

使用 适用于 Java 的 AWS SDK 2.x 时，推荐使用 Maven 来管理依赖关系。要将版本 2.x 组件添加到您的项目，只需使用 SDK 上的依赖项来更新 `pom.xml` 文件。

**Example**  

```
<dependencyManagement>
    <dependencies>
        <dependency>
          <groupId>software.amazon.awssdk</groupId>
          <artifactId>bom</artifactId>
          <version>2.27.21</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>dynamodb</artifactId>
    </dependency>
</dependencies>
```

在将项目迁移到 [2.x 版本时 side-by-side，也可以使用 1.x 和 2.x](migration-side-by-side.md) 版本。

## 不可变 POJOs
<a name="immutable-classes"></a>

客户端和操作的请求和响应对象现在不可变，并且在创建之后不能更改。要重复使用一个请求或响应变量，您必须生成一个要分配给该请求或响应变量的新对象。

**Example 在 1.x 中更新请求对象**  

```
DescribeAlarmsRequest request = new DescribeAlarmsRequest();
DescribeAlarmsResult response = cw.describeAlarms(request);

request.setNextToken(response.getNextToken());
```

**Example 在 2.x 中更新请求对象**  

```
DescribeAlarmsRequest request = DescribeAlarmsRequest.builder().build();
DescribeAlarmsResponse response = cw.describeAlarms(request);

request = DescribeAlarmsRequest.builder()
        .nextToken(response.nextToken())
        .build();
```

## Setter 和 getter 方法
<a name="setter-getter-methods"></a>

在 适用于 Java 的 AWS SDK 2.x 中，setter 方法名称不包含`set`或`with`前缀。例如，`*.withEndpoint()` 现为 `*.endpoint()`。

Getter 方法名称不使用 `get` 前缀。

**Example 在 1.x 中使用 setter 方法**  

```
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
        		.withRegion("us-east-1")
        		.build();
```

**Example 在 2.x 中使用 setter 方法**  

```
DynamoDbClient client = DynamoDbClient.builder()
        		.region(Region.US_EAST_1)
        		.build();
```

**Example 在 1.x 中使用 getter 方法**  

```
String token = request.getNextToken();
```

**Example 在 2.x 中使用 getter 方法**  

```
String token = request.nextToken();
```

## 模型类名
<a name="model-classname-changes"></a>

代表服务响应的模型类名在 v2 中以 `Response` 结尾，而不是以 v1 使用的 `Result` 结尾。

**Example 在 v1 中代表响应的类名**  

```
CreateApiKeyResult
AllocateAddressResult
```

**Example 在 v2 中代表响应的类名**  

```
CreateApiKeyResponse
AllocateAddressResponse
```

## 库和实用工具的迁移状态
<a name="migration-libraries-utilities"></a>

### 适用于 Java 的 SDK 库和实用工具
<a name="migration-java-sdk-libs-utils"></a>

下表列出了适用于 Java 的 SDK 库和实用工具的迁移状态。


| 版本 1.12.x 中的名称 | 版本 2.x 中的名称 | 自 2.x 的以下版本起 | 
| --- | --- | --- | 
| 迪纳摩 DBMapper | [DynamoDbEnhancedClient](dynamodb-enhanced-client.md) | 2.12.0 | 
| Waiter | [Waiter](waiters.md) | 2.15.0 | 
| CloudFrontUrlSigner, CloudFrontCookieSigner | [CloudFrontUtilities](https://aws.amazon.com/blogs/developer/amazon-cloudfront-signed-urls-and-cookies-are-now-supported-in-aws-sdk-for-java-2-x/) | 2.18.33 | 
| TransferManager | [S3TransferManager](transfer-manager.md) | 2.19.0 | 
| EC2 元数据客户端 |  [EC2 元数据客户端](examples-ec2-IMDS.md)  | 2.19.29 | 
| S3 URI 解析器 |  [S3 URI 解析器](https://aws.amazon.com/blogs/devops/s3-uri-parsing-is-now-available-in-aws-sdk-for-java-2-x/)  | 2.20.41 | 
| IAM policy 生成器 | [IAM policy 生成器](feature-iam-policy-builder.md) | 2.20.126 | 
| S3 事件通知 | [S3 事件通知](examples-s3-event-notifications.md#s3-event-notification-read) | 2.25.11  | 
| Amazon SQS 客户端缓存 | [适用于 Amazon SQS 的自动请求批处理 API](sqs-auto-batch.md) | 2.28.0 | 
| 进程侦听程序 | 进程侦听程序 | [尚未发布](https://github.com/aws/aws-sdk-java-v2/issues/25) | 

### 相关库
<a name="migration-other-sdks"></a>

下表列出了单独发布但可与适用于 Java 的 SDK 2.x 配合使用的库。


| 适用于 Java 的 SDK 2.x 中使用的名称 | 最低版本 | 
| --- | --- | 
|  [Amazon S3 加密客户端](https://docs.aws.amazon.com/amazon-s3-encryption-client/latest/developerguide/what-is-s3-encryption-client.html)  |  3.0.0 1  | 
| [AWS 适用于 DynamoDB 的数据库加密 SDK](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/ddb-java.html) | 3.0.0 2 | 

#### 1Amazon S3 加密客户端
<a name="migration-s3-encryption-sdk"></a>

适用于 Amazon S3 的加密客户端可通过使用以下 Maven 依赖项获得。

```
<dependency>
    <groupId>software.amazon.encryption.s3</groupId>
    <artifactId>amazon-s3-encryption-client-java</artifactId>
    <version>{{3.x}}</version>
</dependency>
```

#### 2 适用于 DynamoDB 的AWS 数据库加密 SDK
<a name="migration-ddb-encryption-sdk"></a>

通过使用以下 Maven 依赖项，适用于 DynamoDB 的 AWS 数据库加密 SDK 可用于 V2。

```
<dependency> 
    <groupId>software.amazon.cryptography</groupId>
    <artifactId>aws-database-encryption-sdk-dynamodb</artifactId>
    <version>{{3.x}}</version>
</dependency>
```

[数据库加密软件开发工具包开发人员指南（名为 Java 版 Amazon DynamoDB 加密客户端）和中AWS 提供了与 Java 软件开发工具包版本 1 配合使用的 D *ynamoDB* 加密](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/java.html)库的信息。[GitHub](https://github.com/aws/aws-dynamodb-encryption-java)

[有关与 Java SDK 版本 2 兼容的 DynamoDB 加密库的更多信息，请参阅[AWS 数据库加密 SDK 开发人员](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/ddb-java.html)指南和源代码。GitHub](https://github.com/aws/aws-database-encryption-sdk-dynamodb)

《[AWS 数据库加密 SDK 开发人员指南](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/ddb-java-migrate.html)》中提供了有关加密库的迁移信息。

### 库和实用工具的迁移详细信息
<a name="migrate-libs-utils-details"></a>
+ [Transfer Manager](migration-s3-transfer-manager.md)
+ [EC2 元数据实用程序](migration-imds.md)
+ [CloudFront预先签名](migration-cloudfront-presigning.md)
+ [S3 URI 解析](migration-s3-uri-parser.md)
+ [DynamoDB mapping/document APIs](migration-ddb-mapper.md) 
+ [IAM 策略生成器](migration-iam-policy-builder.md)
+ [S3 事件通知](migration-s3-event-notification.md)
+ SDK 指标发布（[1.x 文档](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html)、[2.x](metrics.md) 文档）