spring中容器启动过程中初始化资源使用方法
?一、定義
在業(yè)務(wù)場景中,有時需要我們在容器啟動過程中加載資源,完成數(shù)據(jù)的初始化或者配置,需要在調(diào)用前加載進spring容器過程中去,有以下一些方法來實現(xiàn)
1.定義靜態(tài)常量,隨著類的生命周期加載而提前加載。一般使用較多,這里不做說明
2.實現(xiàn)InitializingBean接口;重寫afterPropertiesSet()方法
3.實現(xiàn)CommandLineRunner接口(Spring Boot中使用);容器啟動之后,加載實現(xiàn)類的邏輯資源,已達到完成資源初始化的任務(wù)
4.@PostConstruct;在具體Bean的實例化過程中執(zhí)行
?
?二、實現(xiàn)InitializingBean接口
重寫afterPropertiesSet()方法,來完成資源的初始化
1.InitializingBean接口
InitializingBean接口為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在初始化bean的時候都會執(zhí)行該方法。
2.使用方法
1)編寫一個類引用InitializingBean接口,重寫其中的afterPropertiesSet方法,在其中寫自己的方法
使用注解@Component或者自己在spring配置文件中裝配bean來注入spring容器
可以看到在項目啟動過程中就已經(jīng)執(zhí)行了TestComponent類中重寫的afterPropertiesSet方法
?
三、Spring boot中實現(xiàn)CommandLineRunner接口
1.Java 文件中配置實現(xiàn)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.執(zhí)行結(jié)果
在啟動spring過程中加載進來
3.@Order排序
可以使用注解@Order注解,如果想要對加載資源的順序進行排序
4.結(jié)果如下所示:
可以看到:ExampleCommandLineRunner類中的run方法在ExampleCommandLineRunner2的run方法之后執(zhí)行,因為定義的@Order(value)順序原因,value越小,優(yōu)先級越高,注意最小是1,不能低于這個,否則會報錯
?
?四、@PostConstruct注解
用于方法上,@PostConstruct注解的方法,會在構(gòu)造方法之后執(zhí)行。加載順序為:Constructor > @Autowired > @PostConstruct > 靜態(tài)方法,但要注意以下使用方法
特點:
- 只有一個非靜態(tài)方法能使用此注解
- 被注解的方法不得有任何參數(shù)
- 被注解的方法返回值必須為void
- 被注解方法不得拋出已檢查異常
- 此方法只會被執(zhí)行一次
結(jié)果展示:
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的spring中容器启动过程中初始化资源使用方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zk宕机掉与客户端连接过程记录
- 下一篇: git常用命令操作