【问题记录】【SpringBoot】启动不加载某个Starter,通过代码控制某个Starter加载
1 问题描述
最近在看Sa-Token,发现当引进Sa-Token的依赖包sa-token-spring-boot-starter,SpringBoot启动会自动加载Sa-Token的东西,我想通过某个配置或者代码来控制是否要加载Sa-Token的这些东西,也就是按需加载。
<dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.33.0</version> </dependency>
如图只要引入maven依赖,SpringBoot启动的时候就会加载。
2 解决办法
我的思路是SringBootApplication注解里exclude可以排除某些类的自动装配,但是我又不想在这个大注解里配,所以单独抽出一个Configuration来排除不需要装配的类,然后在需要的时候再引进这些类。
(1)查看依赖包的自动装配里会加载哪些类
(2)新增配置类,排除这些自动装配的类
1 @Configuration 2 @EnableAutoConfiguration(exclude = {SaBeanRegister.class 3 , SaBeanInject.class 4 , SaSsoBeanRegister.class 5 , SaSsoBeanInject.class 6 , SaOAuth2BeanRegister.class 7 , SaOAuth2BeanInject.class}) 8 public class SaTokenConfig { 9 }
(3)排除掉以后,新增一个注解类,通过注解,按需加载。
/** * @description 需要登录注解 */ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Import({SaBeanRegister.class , SaBeanInject.class , SaSsoBeanRegister.class , SaSsoBeanInject.class , SaOAuth2BeanRegister.class , SaOAuth2BeanInject.class , SsoConfig.class}) public @interface SsoLogin { }
这是我的一个思路,实现了我想要的效果,不知道大佬们有没有更好的办法。