@ComponentScan 注解是 Spring 中很常用的注解,用于扫描并加载指定类路径下的 Bean,而 Spring Boot 为了便捷使用 @SpringBootApplication 组合注解集成了 @ComponentScan 的能力。也许你听说过使用后者会覆盖前者中关于包扫描的设置,但你是否质疑过这个“不合常理”的结论?是否好奇过为什么它们不像其他注解在嵌套使用时可以同时生效?又是否好奇过 @SpringBootApplication 可以间接设置 @ComponentScan 属性的原因?本文从源码角度分析 @ComponentScan 的工作原理,揭示它独特的检索算法和注解层次结构中的属性覆盖机制。

阅读全文 »

@ConfigurationProperties@EnableConfigurationPropertiesSpring Boot 中常用的注解,提供了方便和强大的外部化配置支持。尽管它们常常一起出现,但是它们真的必须一起使用吗?Spring Boot 的灵活性常常让我们忽略配置背后产生的作用究竟是什么?本文将从源码角度出发分析两个注解的作用时机工作原理

阅读全文 »

Spring 中,AutowiredAnnotationBeanPostProcessor 是一个非常重要的后处理器,它可以自动装配标注注解的字段和方法,默认使用 @Autowired@Value 注解,可以支持 JSR-330@Inject 注解。本文通过分析源码介绍它的调用时机和工作原理。

阅读全文 »

@PropertySource 注解提供了一种方便的声明性机制,用于将 PropertySource 添加到 Spring 容器的 Environment 环境中。该注解通常搭配 @Configuration 注解一起使用。本文将介绍如何使用 @PropertySource 注解,并通过分析源码解释外部配置文件是如何被解析进入 SpringEnvironment 中。

阅读全文 »

在分析 Spring Boot 自动配置的工作原理时,我们并没有深入“如何获得配置在 spring.factories 中的自动配置类”。本文将从图解和源码两个角度分析 Spring Boot SPI 机制,了解 spring.factories 中的配置是如何被加载和解析成为缓存中的“接口-实现”键值对。

阅读全文 »

如果你正在参与一个共享库的开发,你可能会想为使用方提供自动配置的支持,以帮助对方快速地接入和使用。自动配置机制往往和 starter 联系在一起,本文将介绍如何创建一个自定义的 starter 并从源码角度分析 Spring Boot 自动配置的工作原理。

阅读全文 »

Import 注解是 Spring 基于 Java 注解配置的重要组成部分,处理 Import 注解是处理 Configuration 注解的子过程之一,本文将介绍 Import 注解的 3 种使用方式,然后通过分析源码和处理过程示意图解释它是如何导入(注册) BeanDefinition 的。

阅读全文 »

Nginx 没有提供开箱即用的日志滚动功能,而是将其交给使用者自己实现。你既可以按照官方文档的建议通过编写脚本实现,也可以使用 logrotate 管理日志。但是和在普通场景下不同,在使用 Docker 运行 Nginx 时,你可能需要额外考虑一点细节。本文记录了在为 Docker 中的 Nginx 的日志文件配置滚动功能过程中遇到的一些问题和思考。

阅读全文 »

原先在使用 Cloudflare Tunnel 访问家庭网络中的服务时,是直接将域名解析到相应服务。尽管 Cloudflare 已经提供相关的请求统计和安全防护功能,部分服务自身也有访问日志,但是为了更好地监控和跟踪对外服务的使用情况,采集 Cloudlfare 统计中缺少的新,决定使用 Nginx 反向代理内部服务,统一内部服务的访问入口。简而言之就是,又折腾一些有的没的。以上修改带来的一个附加好处是在局域网内访问服务时,通过在 hosts 文件中添加域名映射,可以用更加容易记忆的域名代替 IP + port 的形式去访问。

阅读全文 »
0%