从new函数开始,看一下biuld函数
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
(1)Build函数
@Override
public OSS build(String endpoint, String accessKeyId, String secretAccessKey) {
return new OSSClient(endpoint, getDefaultCredentialProvider(accessKeyId, secretAccessKey),getClientConfiguration());
}
调用了getDefaultCredentialProvider方法 返回了一个DefaultCredentialProvider对象
private static DefaultCredentialProvider getDefaultCredentialProvider(String accessKeyId, String secretAccessKey) {
return new DefaultCredentialProvider(accessKeyId, secretAccessKey);
}
(2)DefaultCredentialProvider类 看看这个类有啥,最终调用了第二个重载方法
public DefaultCredentialProvider(String accessKeyId, String secretAccessKey) {
this(accessKeyId, secretAccessKey, null);
}
public DefaultCredentialProvider(String accessKeyId, String secretAccessKey, String securityToken) {
checkCredentials(accessKeyId, secretAccessKey);
setCredentials(new DefaultCredentials(accessKeyId, secretAccessKey, securityToken));
}
(3)checkCredentials方法 判断ak和sk是否为空,为空就抛出异常
private static void checkCredentials(String accessKeyId, String secretAccessKey) {
if (accessKeyId == null || accessKeyId.equals("")) {
throw new InvalidCredentialsException("Access key id should not be null or empty.");
}
if (secretAccessKey == null || secretAccessKey.equals("")) {
throw new InvalidCredentialsException("Secret access key should not be null or empty.");
}
}
(4)DefaultCredentials类 这个类比较简单。三个私有属性和几个get方法 这里的构造方法又判断一次ak,sk是否为空
public DefaultCredentials(String accessKeyId, String secretAccessKey, String securityToken) {
if (accessKeyId == null || accessKeyId.equals("")) {
throw new InvalidCredentialsException("Access key id should not be null or empty.");
}
if (secretAccessKey == null || secretAccessKey.equals("")) {
throw new InvalidCredentialsException("Secret access key should not be null or empty.");
}
this.accessKeyId = accessKeyId;
this.secretAccessKey = secretAccessKey;
this.securityToken = securityToken;
}
(5)--->setCredentials方法 这里面传了一个DefaultCredentials对象,此类继承了Credentials类 然后判断这个对象是否为空, 然后又又调用了一次checkCredentials判断ak,sk是否为空 最后将这个对象赋值给自身成员属性 private volatile Credentials creds;
@Override
public synchronized void setCredentials(Credentials creds) {
if (creds == null) {
throw new InvalidCredentialsException("creds should not be null.");
}
checkCredentials(creds.getAccessKeyId(), creds.getSecretAccessKey());
this.creds = creds;
}
最终,getDefaultCredentialProvider方法返回了一个DefaultCredentialProvider对象
现在可以回到第一行代码的build函数了