spring中控制bean加载顺序的几种方式

挺常用的一个spring的功能,记录一下

需求

在项目加载阶段 使用mybatis查询部分数据 缓存 到redis

分析

需要在程序启动后运行逻辑代码,并且在StringRedisTemplateDeviceInfoMapper 加载完成后

代码(注释)

@Component // bean组件
@Order() // 放到bean加载的最后
@RequiredArgsConstructor // lombok中设置 final修饰的 构造方法
@Slf4j // lombok中的日志注解
public class DeviceOnlineConfig implements ApplicationRunner {
// ApplicationRunner :Spring Boot应用程序启动后,实现了ApplicationRunner接口的Bean会自动执行run方法
	// redis
    private final StringRedisTemplate redisTemplate;
    // mybatis
    private final DeviceInfoMapper deviceInfoMapper;
    @Override
    public void run(ApplicationArguments args) {
        // todo: 业务逻辑
       
        log.info("我执行了!!!");
    }
}

代码解释

1. Order()

@Order注解用于指定Bean的加载顺序,可以在@Order传入一个整数值,**值越小表示加载顺序越靠前**
例如,@Order(1)的Bean会在@Order(2)的Bean之前被加载

2. ApplicationRunner

当Spring Boot应用程序启动后,实现了`ApplicationRunner`接口的`Bean`会自动执行`run`方法。

3. @RequiredArgsConstructor |

> 感觉很好用 记录一下 

`@RequiredArgsConstructor`是`Lombok`库提供的注解,
它可以为标注了final的成员变量自动生成构造函数。

其他方式

@Conditional 条件注解家族

Spring源码里面全是这东西

  • @ConditionalOnClass 当类路径下存在指定的类时,配置类才会生效。
    @Configuration
    // 当类路径下存在指定的类时,配置类才会生效。
    @ConditionalOnClass(name = "com.example.SomeClass")
    public class MyConfiguration {
    	// ...
    }
    
  • @ConditionalOnMissingClass 当类路径下不存在指定的类时,配置类才会生效。
  • @ConditionalOnBean 当容器中存在指定的Bean时,配置类才会生效。
  • @ConditionalOnMissingBean 当容器中不存在指定的Bean时,配置类才会生效。

@DependsOn 指定依赖关系

@DependsOn注解用于指定Bean初始化的依赖关系,它可以确保在当前Bean初始化之前,指定的Bean已经初始化完成。这意味着在Spring容器启动时,@DependsOn所指定的Bean会先进行初始化,然后再初始化当前的Bean

@DependsOn注解和@ConditionalOnBean注解的功能是不同的:前者用于指定Bean初始化的依赖关系,后者用于根据容器中是否存在指定的Bean来决定是否创建或激活一个Bean或配置类

其他

PriorityOrdered 接口等

要是我的文章有问题,请您指正。

要是对您有帮助,点个赞呗,共同学习进步!

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值