spring boot cas 重定向次数过多_「SpringBoot」 架构师不懂spring-boot-starter?
前言在对公司的架构师沟通中,发现一些原理知识点掌握的程度多多少少存在问题。甚至有些同学对`spring-boot-starter`的作用与机制都完全不了。笔者感到要吐血.......SpringBean扫描在了解Spring-Boot-Starter之前, 先看如下Spring-Boot示例。项目结构:demo|--demo-api API模块|----DemoApplication.java|-
前言
在对公司的架构师沟通中,发现一些原理知识点掌握的程度多多少少存在问题。甚至有些同学对`spring-boot-starter`的作用与机制都完全不了。笔者感到要吐血.......
SpringBean扫描
在了解Spring-Boot-Starter之前, 先看如下Spring-Boot示例。
项目结构:
demo
|--demo-api API模块
|----DemoApplication.java
|------com.xxx.DemoController.java 注解@Controller的控制器
|--demo-service 服务模块
|----com.xxxx.DemoService.java
|------com.xxxx.impl.DemoServiceImpl.java 注解@Service的服务
示例代码
注意,此时是会无法加载DemoService依赖的。(假定,DemoServiceImpl有实现,并且注解了@Service )。
因为,SpringBoot在启动的时候, 会自动扫描当前项目(模块)下的同级+子级包下,注解如@Controller,@Service,@Component的类,并加载到Bean容器中。
也就是说,不会扫描其他的模块。在上图的项目结构中,只能扫描到DemoController,而无法扫描到多模块的demo-service模块中的DemoServiceImpl。
因为@SpringBootApplication 中,注解了
默认是不会扫描其他的包。
默认情况下,basePackages是空的,所以,最终只会扫描当前类declaringClass的包及子级包。
那么,如果扫描其他的子模块下的包呢?
这样,在启动类的时候,就以生效,会自动扫描"com.xxxx"包下的注解如@Controller,@Service,@Component的类,并加载到Bean容器中。
那么,如果存在各种不同命名的包结构,则需要配置一堆的basePackages。
如何解决?
Spring-Boot-Starter
官方描述:Core starter, including auto-configuration support, logging and YAML。
核心:包括自动配置支持,日志记录和YAML
Starters是用来快速处理项目依赖项。比如spring-boot-starter-data-redis,可以快速的自动将redis中的配置自动装载和初始化,而不需要额外的进行过多的配置或者初始化动作。
简单来说就是:Starters实现了自动的配置装载与内部依赖初始化动作。
实现原理
spring.factories
Spring-Boot-Starter简单来说,就是使用spring.factories来进行配置的自动化装载。(SPI机制)
如:
那么,在启动的时候,就会自动装载ProviderServiceAutoConfiguration包下及子级包的Bean。
原理分析
主要实现在SpringFactoriesLoader类中。
更多推荐
所有评论(0)