Java最全OCP开源项目:数据库公共组件的实现(db-spring-boot-starter),java每次面试一般多长时间

线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识

一线互联网P7面试集锦+各种大厂面试集锦

学习笔记以及面试真题解析

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

db-spring-boot-starter


前面项目中,咱们使用了db-core为整个项目提供通用的数据库处理,现在我们将采用springboot 标准starter的做法,重构项目基础组件。

编写数据库公共组件db-spring-boot-starter

image

image

image

  • 工具类

  • AOP切换数据源类

  • 多数据源定义core log

user-center代码


image

image

  • user-center pom文件使用

  • user-center application.yml

咱们想想,在不同项目中,咱们的项目是如何装配这些对象的吗?下面咱们需要揭密。

image

image

  • db-spring-boot-starter 中定义了spring.factories文件

  • DataSourceAutoConfig 中@Import(DataSourceAOP.class)

那么这些文件是如何完成加载到spring容器的呢?

此时,咱们必须回到user-center,阅读源码

image

image

image

  • @SpringBootApplication

  • @EnableAutoConfiguration

  • AutoConfigurationImportSelector

阅读到这里,我们了解到,user-center在启动时,由于@SpringBootApplication是复合注解,包含@EnableAutoConfiguration,这个类中@import了核心处理类AutoConfigurationImportSelector,这个类的核心就是将classpath中搜索所有META-INF/spring.factories配置文件

,并且将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration key对应的配置项加载到spring容器

springboot中的类SPI扩展机制


在springboot的自动装配过程中,最终会加载META-INF/spring.factories文件,而加载的过程是由SpringFactoriesLoader加载的。从CLASSPATH下的每个Jar包中搜寻所有META-INF/spring.factories配置文件,然后将解析properties文件,找到指定名称的配置后返回。需要注意的是,其实这里不仅仅是会去ClassPath路径下查找,会扫描所有路径下的Jar包,只不过这个文件只会在Classpath下的jar包中。

总结回顾


内部实现的关键点有

  • 1:ImportSelector 该接口的方法的返回值都会被纳入到spring容器管理中

  • 2:SpringFactoriesLoader 该类可以从classpath中搜索所有META-INF/spring.factories配置文件,并读取配置

最后

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

G开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.youkuaiyun.com/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值