一、利用 Spring BeanPostProcessor,拦截bean初始化,提前注入缓存加载类
1、实现 BeanPostProcessor
2、重写 postProcessorBeforInitialization、postProcessorAfterInitialization 方法
3、在 BeanPostProcessor 后置处理方法 postProcessAfterInitialization 中,调用加载数据的方法
@Component
public class CacheByBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
}
@SneakyThrows
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof HotService) {
((HotService) bean).queryElement("mostComplaints", "element");
}
return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
}
}
二、Java注解@PostConstruct
@PostConstruct:
被注解的方法,在对象加载完依赖注入后执行
@PostConstruct
public void init() {
this.queryAll();
}