8.13实习笔记

1、Java类型问题:全限定名和简单类名

在Java开发中,遇到类似com.aliyun.ocr_api20210707.Client(全限定名)与Client(简单类名)的类型差异,本质是包(Package)机制和类型作用域的体现。

全限定名(Fully Qualified Name)

格式:包名.类名,如:

com.aliyun.ocr_api20210707.Client

作用:全局唯一标识类,避免命名冲突。例如,不同厂商的Client类可通过包名区分。

使用场景:跨模块或第三方库调用时,或者反射时,需显式指定全限定名

简单类名(Simple Class Name)

格式:仅类名,如

Client

作用:在当前作用域内简化代码。

限制:需通过import语句导入全限定名,否则编译器无法识别。

区别
  • 全限定名是类的全局唯一标识,简单类名需配合import使用。

  • 类型声明影响编译器检查,实际执行由运行类型决定(多态)。

  • 包机制是Java模块化的基石,避免命名冲突并控制访问权限


2、SLF4J(Simple Logging Facade for Java)

SLF4J是Java生态中广泛使用的日志门面框架,其核心作用是为不同日志系统(如Logback、Log4j等)提供统一的编程接口

统一日志接口SLF4J本身不实现日志功能,而是定义标准接口(如Logger、LoggerFactory),开发者通过其API编写日志代码,无需关心底层日志框架的具体实现。比如说:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Demo {
    private static final Logger logger = LoggerFactory.getLogger(Demo.class);
    public void run() {
        logger.info("This is a log message");
    }
}

此代码可无缝适配Logback、Log4j2等日志框架。

解耦与灵活性方面,可以避免绑定特定日志框架:业务代码仅依赖SLF4J接口,更换日志实现时无需修改源码,只需调整依赖配置。另外,也可以解决依赖冲突:若第三方库使用不同日志框架(如A库用Log4j,B库用JUL),SLF4J可通过桥接器(如jcl-over-slf4j)统一路由日志输出,避免多套日志并存。


3、管理访问凭据——阿里云Credentials工具使用过程

作用:统一管理访问阿里云资源的认证凭证(如AccessKey、STS Token等),确保API调用的安全性。硬编码的解决方案之一

凭证类型支持:
  • 永久凭证:主账号或RAM用户的AccessKey(AK),含AccessKeyId和AccessKeySecret。

  • 临时凭证:STS Token(自定义时效与权限)、ECS实例RAM角色凭证(通过元数据服务自动获取)。

  • 其他类型:RAM角色ARN(通过AssumeRole生成STS)、OIDC角色(用于容器服务RRSA)、Bearer Token(特定产品如云呼叫中心)。

安全机制:
禁止代码硬编码AK,推荐通过环境变量、配置文件或安全URI动态注入凭证。
支持最小权限策略(Policy)和外部ID(ExternalId),防止权限滥用。

配置参数与初始化

核心模型:

  1. 通过Config对象定义凭证类型及相关参数(如accessKeyId、roleArn等)。
  2. 参数按凭证类型差异化支持(例如ram_role_arn需roleArn,ecs_ram_role需roleName)。

初始化方式:

  1. 默认凭证链:不传参时按优先级检索凭证(系统属性 > 环境变量 > 配置文件)。
  2. 显式配置:通过Config对象指定类型及参数。
  3. 单例模式推荐:避免重复请求STS服务,启用凭证缓存与自动刷新。

当初始化凭据客户端不传入任何参数时,Credentials工具会使用默认凭据链方式初始化客户端。

import com.aliyun.credentials.Client;

public class DemoTest {
    public static void main(String[] args) throws Exception{
        // 不指定参数
        Client credentialClient = new Client();
        // 省略使用credentialClient初始化云产品客户端内容...
    }
}

另一种方式是使用AK:

import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class DemoTest {
    public static void main(String[] args) throws Exception{
        Config credentialConfig = new Config();
        credentialConfig.setType("access_key");
        credentialConfig.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        credentialConfig.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        Client credentialClient = new Client(credentialConfig);
        // 省略使用credentialClient初始化云产品客户端内容...
    }
}

等等。

后面的还没涉及到。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容