一、定义

在业务场景中,有时需要我们在容器启动过程中加载资源,完成数据的初始化或者配置,需要在调用前加载进spring容器过程中去,有以下一些方法来实现

1.定义静态常量,随着类的生命周期加载而提前加载。一般使用较多,这里不做说明

2.实现InitializingBean接口;重写afterPropertiesSet()方法

3.实现CommandLineRunner接口(Spring Boot中使用);容器启动之后,加载实现类的逻辑资源,已达到完成资源初始化的任务

4.@PostConstruct;在具体Bean的实例化过程中执行

二、实现InitializingBean接口

重写afterPropertiesSet()方法,来完成资源的初始化

1.InitializingBean接口

InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。

2.使用方法

1)编写一个类引用InitializingBean接口,重写其中的afterPropertiesSet方法,在其中写自己的方法

使用注解@Component或者自己在spring配置文件中装配bean来注入spring容器

可以看到在项目启动过程中就已经执行了TestComponent类中重写的afterPropertiesSet方法

三、Spring boot中实现CommandLineRunner接口

1.Java 文件中配置实现CommandLineRunner接口,重写run方法

@Component
@Slf4j
public class ExampleCommandLineRunner implements CommandLineRunner {@Autowiredprivate JedisClusterClient jedisClusterClient;@Autowiredprivate UserMapper userMapper;@Overridepublic void run(String... args) throws Exception {User user=userMapper.selectByPrimaryKey(1);jedisClusterClient.set("test:user",user.toString());log.info("测试CommandLineRunner初始化加载接口:加载一个user_id=1的用户=[{}]",user,toString());}
}

2.执行结果

在启动spring过程中加载进来

3.@Order排序

可以使用注解@Order注解,如果想要对加载资源的顺序进行排序

4.结果如下所示:

可以看到:ExampleCommandLineRunner类中的run方法在ExampleCommandLineRunner2的run方法之后执行,因为定义的@Order(value)顺序原因,value越小,优先级越高,注意最小是1,不能低于这个,否则会报错

四、@PostConstruct注解

用于方法上,@PostConstruct注解的方法,会在构造方法之后执行。加载顺序为:Constructor > @Autowired > @PostConstruct > 静态方法,但要注意以下使用方法

特点:

- 只有一个非静态方法能使用此注解
- 被注解的方法不得有任何参数
- 被注解的方法返回值必须为void
- 被注解方法不得抛出已检查异常
- 此方法只会被执行一次

@Component
@Slf4j
public class ExamplePostConstruct {@Autowiredprivate JedisClusterClient jedisClusterClient;@Autowiredprivate UserMapper userMapper;@PostConstructpublic void loadUser(){User user=userMapper.selectByPrimaryKey(3);jedisClusterClient.set("test:user_id=3",user.toString());log.info("测试PostConstruct初始化加载接口:加载一个user_id=3的用户=[{}]",user,toString());}
}

结果展示:

spring中容器启动过程中初始化资源使用方法相关推荐

  1. 用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化

    前一段时间就在研究用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化,但被一些无关紧要的事儿给耽误了,经过查阅<dockerfile最佳实践>及MyS ...

  2. 重新学习Spring一--Spring在web项目中的启动过程

    1 Spring 在web项目中的启动过程 Spring简介 Spring 最简单的功能就是创建对象和管理这些对象间的依赖关系,实现高内聚.低耦合.(高内聚:相关性很强的代码组成,既单一责任原则:低耦 ...

  3. 计算机加电启动操作引导自举,在计算机加电启动过程中,加电自检程序、 操作系统、引导程序、自举装入程序,这四个的执行顺序为...

    在计算机加电启动过程中四个程序的执行顺序应该为: 1.加电自检程序: 2.自举装入程序: 3.引导程序: 4.操作系统. 复位启动: "复位"是用硬件控制的方式对CPU进行复位操作 ...

  4. linux启动过程中内核拷贝,轻松识破linux内核启动过程中的“”套路“”

    内核启动流程相关的内容让很多热爱linux的小伙伴既爱又恨,因为这是了解linux系统基本构造的良好过程同时由于其本身复杂且底层,脑子中的脉络不是很清晰,本文就总结了一些优秀博文,以自己的理解来解构一 ...

  5. 容器运行过程中异常处理

    容器使用过程中异常处理 最近使用容器时,系统中的容器总是在重启后出现异常,要么处于CREAT状态,要么处于EXIT状态,导致容器中的应用无法运行. 问题 异常状态1: 容器在启动阶段被终端,导致容器一 ...

  6. RabbitMQ系列之【启动过程中遇到问题及解决方案】

    RabbitMQ系列之[启动过程中遇到问题及解决方案] 参考文章: (1)RabbitMQ系列之[启动过程中遇到问题及解决方案] (2)https://www.cnblogs.com/feixiabl ...

  7. Tomcat启动过程中找不到JAVA_HOME解决方法

    在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomcat在启动过程中找不到. 报错信息如下:Neither the JAVA_HOME nor the JRE_HOME en ...

  8. 嵌入式Linux启动过程中的问题积累

    嵌入式Linux启动过程中的问题积累 Dongas 07-12-19 1.Bad Magic Number ## Booting image at 33000000 ... Bad Magic Num ...

  9. JAVA项目中找不到tomcat_Tomcat启动过程中找不到JAVA_HOME解决方法

    在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomcat在启动过程中找不到. 报错信息如下:Neither the JAVA_HOME nor the JRE_HOME en ...

最新文章

  1. java正则表达式替换指定字符串_笔记_正则表达式替换字符串中特定范围内的字符。...
  2. signal.h 中的宏定义 SIG_DFL 及 SIG_IGN
  3. php 芝麻认证think_PHP 芝麻信用接入的注意事项
  4. IO多路复用(select,poll,epoll)详解
  5. DevExpress使用技巧总结
  6. 【Elasticsearch】es 插件类型
  7. java 面试常问问题
  8. Kali安装中文输入法
  9. 天梯赛座位 分配分数 20作者 陈越单位 浙江大学
  10. 十进制转换为三进制数_python3实现
  11. Python中的微型巨人-Flask
  12. re.compile(r'xxx')中的r是什么意思
  13. KindEditor 图片粘贴上传,实现图文粘贴,图片自动上传
  14. matlab7 fig exe 阴影,Matlab 生成完全独立运行的 EXE文件的问题请教
  15. 3G UMTS与4G LTE核心网(二):4G网络概述
  16. SQL Server Management Studio(SMSS)删除连接记录
  17. 15.7数据库(7):MySQL创建校园数据库
  18. 中山大学 精品课程C++ 视频教学
  19. Codeforces Round #512 (Div. 2 E. Vasya and Good Sequences 异或问题
  20. python中callable什么意思_python中callable对象有什么用

热门文章

  1. python字符串常用方法_字符串常用方法
  2. ddr4服务器内存和普通内存_DDR4内存可以在普通电脑上使用吗?有影响吗?
  3. mfc打开控制台异常关闭_vc控制台程序关闭事件时的正确处理方式
  4. 开启注册 | AAAI 2022论文北京预讲会,21场报告+24个Poster等你来
  5. 直播 | 清华大学博士生姚远:对抗语言游戏
  6. 直播报名 | 官方解读NVIDIA黑科技:StyleGAN的架构与实现
  7. 剑指Offer_编程题 不用加减乘除做加法
  8. 01背包问题+完全背包问题+多重背包问题
  9. Python-数据结构-哈希表
  10. android10位置信息,Android 11 中的位置信息更新