适用于 Java 的 AWS SDK 1.x 和 2.x 之间的差异
本部分介绍在将应用程序从使用适用于 Java 的 AWS SDK 版本 1.x 转换为使用版本 2.x 时需要注意的主要更改。
软件包名称更改
从 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 项目部分对此进行了介绍。
注意
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 添加到您的项目
使用适用于 Java 的 AWS SDK 2.x 时,推荐使用 Maven 方法来管理依赖项。要将版本 2.x 组件添加到您的项目,只需使用 SDK 上的依赖项来更新 pom.xml 文件。
<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 时,您也可以并行使用版本 1.x 和 2.x。
不可变 POJO
客户端和操作的请求和响应对象现在不可变,并且在创建之后不能更改。要重复使用一个请求或响应变量,您必须生成一个要分配给该请求或响应变量的新对象。
例 在 1.x 中更新请求对象
DescribeAlarmsRequest request = new DescribeAlarmsRequest(); DescribeAlarmsResult response = cw.describeAlarms(request); request.setNextToken(response.getNextToken());
例 在 2.x 中更新请求对象
DescribeAlarmsRequest request = DescribeAlarmsRequest.builder().build(); DescribeAlarmsResponse response = cw.describeAlarms(request); request = DescribeAlarmsRequest.builder() .nextToken(response.nextToken()) .build();
Setter 和 getter 方法
在适用于 Java 的 AWS SDK 2.x 中,setter 方法名称不包含 set 或 with 前缀。例如,*.withEndpoint() 现为 *.endpoint()。
Getter 方法名称不使用 get 前缀。
例 在 1.x 中使用 setter 方法
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard() .withRegion("us-east-1") .build();
例 在 2.x 中使用 setter 方法
DynamoDbClient client = DynamoDbClient.builder() .region(Region.US_EAST_1) .build();
例 在 1.x 中使用 getter 方法
String token = request.getNextToken();
例 在 2.x 中使用 getter 方法
String token = request.nextToken();
模型类名
代表服务响应的模型类名在 v2 中以 Response 结尾,而不是以 v1 使用的 Result 结尾。
例 在 v1 中代表响应的类名
CreateApiKeyResult AllocateAddressResult
例 在 v2 中代表响应的类名
CreateApiKeyResponse AllocateAddressResponse
库和实用工具的迁移状态
适用于 Java 的 SDK 库和实用工具
下表列出了适用于 Java 的 SDK 库和实用工具的迁移状态。
| 版本 1.12.x 中的名称 | 版本 2.x 中的名称 | 自 2.x 的以下版本起 |
|---|---|---|
| DynamoDBMapper | DynamoDbEnhancedClient | 2.12.0 |
| Waiter | Waiter | 2.15.0 |
| CloudFrontUrlSigner、CloudFrontCookieSigner | CloudFrontUtilities |
2.18.33 |
| TransferManager | S3TransferManager | 2.19.0 |
| EC2 元数据客户端 | EC2 元数据客户端 | 2.19.29 |
| S3 URI 解析器 | S3 URI 解析器 |
2.20.41 |
| IAM policy 生成器 | IAM 策略生成器 | 2.20.126 |
| S3 事件通知 | S3 事件通知 | 2.25.11 |
| Amazon SQS 客户端缓存 | 适用于 Amazon SQS 的自动请求批处理 API | 2.28.0 |
| 进程侦听程序 | 进程侦听程序 | 尚未发布 |
相关库
下表列出了单独发布但可与适用于 Java 的 SDK 2.x 配合使用的库。
| 适用于 Java 的 SDK 2.x 中使用的名称 | 最低版本 |
|---|---|
| Amazon S3 加密客户端 | 3.0.01 |
| 适用于 DynamoDB 的 AWS 数据库加密 SDK | 3.0.02 |
1Amazon S3 加密客户端
适用于 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
适用于 DynamoDB 的 AWS 数据库加密 SDK 现可与 V2 配合使用,可通过使用以下 Maven 依赖项获得。
<dependency> <groupId>software.amazon.cryptography</groupId> <artifactId>aws-database-encryption-sdk-dynamodb</artifactId> <version>3.x</version> </dependency>
《AWS 数据库加密 SDK 开发人员指南》(名为适用于 Java 的 Amazon DynamoDB Encryption Client)和 GitHub
有关与 Java SDK V2 兼容的 DynamoDB 加密库的更多信息,请参阅《AWS 数据库加密 SDK 开发人员指南》和 GitHub 源
《AWS 数据库加密 SDK 开发人员指南》中提供了有关加密库的迁移信息。