初学源码如何越学越香 ?

åå­¦æºç å¦ä½è¶å­¦è¶é¦ ?

为什么学习源码 ?

  • 告别码农, 追求技术的本质, 不被框架花里胡哨的封装吓倒.

  • 当感觉到自己对现在工作已经得心应手时, 想更进一层楼.真正读懂业务代码底层,

  • 面试时能更好的吊打面试官,让企业对你垂涎三尺.

 

阿里云SDK 是什么?

阿里云SDK允许您通过编程访问阿里云服务,例如弹性计算服务(ECS),服务器负载平衡器(SLB)和CloudMonitor。您可以访问阿里云服务,而无需处理与API相关的任务,例如签名和构造请求。

 

为什么要学阿里云 SDK Core ?

  • 阿里云 SDK Core 最低兼容 JDK1.6 , 项目中没有使用高版本语法糖, 代码逻辑相对简单, 学习门槛低.

  • 阿里云SDK Core 包含了基础的设计模式, 以及 动态代理, 网络通讯, 日志集成等多项Java编程技巧.

  • 阿里云在中国云服务器市场的份额最大, 所有的阿里云服务SDK 都依赖SDK Core, 源码含金量高.

  • 阿里巴巴将制定了符合中国特色的Java开发规范, 学习它的源码等同于学习阿里Java开发规范.

 

学习SDK Core 第一步

阿里云SDK 基于 Maven 管理, 只需要你的电脑装有 Maven 并且 JDK 1.6 以上就可以运行所有阿里云 SDK项目.现在要做的是下载源码 (本文SDK基于 4.4.2).

https://developer.aliyun.com/tools/sdk?spm=a2c6h.13066369.0.0.7e254204vNmPv3#/java

看个 SDK Core Demo

以下代码示例显示了使用阿里云SDK for Java的三个主要步骤 (阿里云短信Demo) :

  1. 创建并初始化DefaultAcsClient实例。

  2. 创建一个API请求并设置参数。

  3. 发起请求并处理响应或异常。

 package com.testprogram;
 import com.aliyuncs.CommonRequest;
 import com.aliyuncs.CommonResponse;
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.IAcsClient;
 import com.aliyuncs.http.HttpUtil;
 import com.aliyuncs.profile.DefaultProfile;
 public class Main {
     public static void main(String[] args) {

        // 1.创建并初始化`DefaultAcsClient`实例。
        DefaultProfile profile = DefaultProfile.getProfile(
            "<your-region-id>",          // The region ID
            "<your-access-key-id>",      // The AccessKey ID of the RAM account
            "<your-access-key-secret>"); // The AccessKey Secret of the RAM account
        IAcsClient client = new DefaultAcsClient(profile);

        // 2.创建一个API请求并设置参数。
        CommonRequest request = new CommonRequest();
        request.setSysProtocol(ProtocolType.HTTPS);
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("dysmsapi.aliyuncs.com");
        request.setSysVersion("2017-05-25");
        request.setSysAction("SendSms");
        request.putQueryParameter("SignName", "xxxx告诉");
        request.putQueryParameter("PhoneNumbers", 1329695482131);
        request.putQueryParameter("TemplateCode", "SMS_1754303333");

    /*
      尊敬的${named},(先生/女士): 您好!感谢您使用XXXXX 平台的服务.
      您的 ${orderId} 订单已完成. 为了提高我司的后续服务体验.诚邀您在闲暇时进入我司App 对本订单进行追评,
     */
        request.putQueryParameter("TemplateParam", "     {\"named\":\""+named+"\",\"orderId\":\""+orderId+"\"}");

        // 3.发起请求并处理响应或异常。
        try {
            CommonResponse response = client.getCommonResponse(request);
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

 

开启SDK Core Debug 开关 的两种方式

  • // 在最开始代码显示声明 HttpUtil.setIsHttpContentDebug(true); HttpUtil.setIsHttpDebug(true);

  • 设置 环境变量 K = DEBUG V = sdk 具体原因为

彩蛋

请查看彩蛋第 30行.

 

查看SDK Core 核心DefaultAcsClient类UML图

Core Demo 前两步是 构建凭证对象, 填充请求对象, 第三步为 SDK 客户端 与 阿里云API资源交互, 为核心逻辑,让我们点进 DefaultAcsClient.getCommonResponse 源码一探究竟,

doAction 方法的参数列表, 请求对象, 请求失败是否重试, 最多重试次数, 客户端凭证.

组装关键参数ing,完事进入重头戏!

集合一切客户端的参数,并完成对称加密 Boby, 重头戏!

代理模式获取最终的RPC客户端来发送封装的信息,抛砖引玉到这. 最后一个彩蛋自己研究, 防止读者成为博客大神….

使用CommonRequest进行调用_使用手册_Java SDK-阿里云​helpcdn.aliyun.com

微信扫描二维码,关注我的公众号

深入浅出分享 Java 干货 , 找回对代码的 Passion , 助力月入 20K+
发布了35 篇原创文章 · 获赞 19 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_37977176/article/details/104459774