spring-cloud-square源码速读(retrofit ,java线程池面试

本文深入解析 Spring Cloud Square 中 Retrofit 的源码实现,从类定义注册阶段到 BeanDefinition 中的 RetrofitClientFactoryBean 实例化过程,帮助开发者理解其工作原理。同时,文章还提供了面试相关的知识点,包括 Java 线程池和面试技巧。
摘要由CSDN通过智能技术生成

前言

本系列的目的是明明白白、彻彻底底的搞定日期/时间处理的几乎所有case。上篇文章铺设所有涉及到的概念解释,例如GMT、UTC、夏令时、时间戳等等,若你还没看过,不仅强烈建议而是强制建议你前往用花5分钟看一下,因为日期时间处理较为特殊,实战必须基于对概念的了解,否则很可能依旧雾里看花。

说明:日期/时间的处理是日常开发非常常见的老大难,究其原因就是对日期时间的相关概念、应用场景不熟悉,所以不要忽视它

本文落地实操,二者相辅相成,缺一不可。本文内容较多,文字较长,预计超2w字,旨在全面的彻底帮你搞定Java对日期时间的处理,建议你可收藏,作为参考书留以备用。

本文提纲

public interface HelloService {

@GET(“/hello-obj”)

Call hello(@Query(“name”) String name);

}

  1. 在业务要做远程调用的时候,用Autowired注解修饰HelloService接口,即可调用HelloService.hello方法,至于接口对应的实例来自哪里,开发者不必关注:

@RestController

public class RemoteHello {

@Autowired(required = false)

HelloService helloService;

@GetMapping(“/remote-obj”)

public HelloResponse hello(@RequestParam(“name”) String name) throws IOException {

return helloService.hello(name).execute().body();

}

}

  • 以上就是咱们开发业务代码时使用spring-cloud-square的关键操作,接下来就从源码角度来分析这些操作到底发挥了什么作用

[](()源码分析(类定义注册阶段)

  • 回忆一下咱们写的OkHttpClientConfig.java,里面使用了注解EnableRetrofitClients,这就是本次阅读代码的入口:

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.TYPE)

@Documented

@Import({ RetrofitConfiguration.class, RetrofitClientsRegistrar.class })

public @interface EnableRetrofitClients {

String[] value() default {};

String[] basePackages() default {};

Class<?>[] basePackageClasses() default {};

Class<?>[] defaultConfiguration() default {};

Class<?>[] clients() default {};

}

  • 从上述代码可见RetrofitConfiguration和RetrofitClientsRegistrar都会比实例化,RetrofitConfiguration过于简单就不看了,重点关注RetrofitClientsRegistrar,先来看它的类图,搞清楚继承和实现

  • 如下图所示,RetrofitClientsRegistrar集成自AbstractRetrofitClientsRegistrar,而AbstractRetrofitClientsRegistrar又集成自ImportBeanDefinitionRegistrar

在这里插入图片描述

  • 所以,RetrofitClientsRegistrar被实例化的时候,就相当于ImportBeanDefinitionRegistrar接口的实现类被实例化了,这个ImportBeanDefinitionRegistrar接口,相信熟悉spring的同学对其不会陌生,它是用来动态注册bean的,那么接下来的重点就是ImportBeanDefinitionRegistrar的registerBeanDefinitions方法的具体内容,看看它到底注册了什么bean

  • registerBeanDefinitions方法的代码在AbstractRetrofitClientsRegistrar.java中(请在上面的类图中找到AbstractRetrofitClientsRegistrar的位置),如下所示,由于EnableRetrofitClients修饰的是咱们创建的OkHttpClientConfig.java,所以下面的入参AnnotationMetadata是OkHttpClientConfig类的注解信息:

@Override

public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {

registerDefaultConfiguration(metadata, registry);

registerRetrofitClients(metadata, registry);

}

  • 上述代码的第一个方法registerDefaultConfiguration是注册配置信息的,非重点,跳过

  • 上述代码的第二个方法registerRetrofitClients,这是本篇的关键,请重点关注下面代码中的中文注释:

public void registerRetrofitClients(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {

ClassPathScanningCandidateComponentProvider scanner = getScanner();

scanner.setResourceLoader(this.resourceLoader);

Set basePackages;

Map<String, Object> attrs = metadata.getAnnotationAttributes(getAnnotationClass().getName());

// 过滤条件:有RetrofitClient注解修饰的类,对应咱们代码中的HelloService.java

AnnotationTypeFilter annotationTypeFilter = new AnnotationTypeFilter(RetrofitClient.class);

final Class<?>[] clients = attrs == null ? null : (Class<?>[]) attrs.get(“clients”);

if (clients == null || clients.length == 0) {

scanner.addIncludeFilter(annotationTypeFilter);

basePackages = getBasePackages(metadata);

}

else {

final Set clientClasses = new HashSet<>();

basePackages = new HashSet<>();

for (Class<?> clazz : clients) {

basePackages.add(ClassUtils.getPackageName(clazz));

clientClasses.add(clazz.getCanonicalName());

}

AbstractClassTestingTypeFilter filter = new AbstractClassTestingTypeFilter() {

@Override

protected boolean match(ClassMetadata metadata) {

String cleaned = metadata.getClassName().replaceAll(“\$”, “.”);

return clientClasses.contains(cleaned);

}

};

scanner.addIncludeFilter(new AllTypeFi

### 回答1: "Mit-Cheetah-Note"是一种学习辅助工具,旨在提高学生的学习效率和效果。它结合了MIT(麻省理工学院)的学习方法和猎豹速读技术。 首先,MIT-Cheetah-Note采用了麻省理工学院的学习方法。这些方法包括主题导图,问题解决和概念联系等。主题导图是一种可视化的学习工具,帮助学生整理和理解知识点之间的关系。问题解决则鼓励学生通过提出问题来主动思考和深入理解知识。概念联系是通过将新知识与已有知识相结合,加深学生对知识的理解。 其次,这个学习工具还集成了猎豹速读技术。速读是一种训练阅读效率和记忆力的技巧。通过使用猎豹速读技术,学生可以提高阅读速度和理解能力。这对于大量阅读任务的学生来说尤其有用,如备考、论文写作等。 MIT-Cheetah-Note采用了数码笔和智能设备相结合的方式进行学习记录和储存。学生可以使用数码笔在纸上做笔记,并通过智能设备将这些笔记同步到云端。这样一来,学生可以随时随地访问他们的学习记录,从而更好地回顾和复习。 总而言之,MIT-Cheetah-Note是将麻省理工学院的学习方法和猎豹速读技术融入一体的学习辅助工具。它帮助学生提高学习效率和效果,并通过数字化技术方便学生的学习记录和辅助复习。 ### 回答2: Mit-Cheetah-Note 是一种人工智能语音助手,最初由麻省理工学院(MIT)研发。该技术基于深度学习和自然语言处理,在提供智能语音交互的同时,还具备类似于记事本的功能。 Mit-Cheetah-Note 可以用于多个方面,例如记录会议笔记、制定待办事项、管理日程安排等。用户可以通过语音指令来创建笔记,编辑文本内容或者提醒自己日程。Mit-Cheetah-Note 还能理解自然语言,对语音指令做出准确的响应,从而提高用户的工作效率。 与其他语音助手相比,Mit-Cheetah-Note 的特点是其记事本功能。用户可以通过语音输入方式,较快地记录需要记下的信息,而无需手动键入。此外,Mit-Cheetah-Note 还有一个方便的搜索功能,可通过关键词搜索用户之前创建的笔记内容,帮助用户快速找到所需的信息。 Mit-Cheetah-Note 可以应用于多种场景,如商务会议、学术讲座、个人笔记等。它不仅可以减少记笔记的时间和工作量,还可以提高笔记的准确性和完整性。 总之,Mit-Cheetah-Note 是一种集成了语音助手和记事本功能的人工智能技术,使用户能够通过语音指令快速记录信息和管理日程,提高工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值