挺常用的一个spring的功能,记录一下
需求
在项目加载阶段 使用mybatis查询部分数据 缓存 到redis中
分析
需要在程序启动后运行逻辑代码,并且在StringRedisTemplate
和DeviceInfoMapper
加载完成后
代码(注释)
@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
接口等