Springboot項(xiàng)目中如何讓非Spring管理的類獲得一個(gè)注入的Bean
Springboot讓非Spring管理的類獲得一個(gè)注入的Bean
由于業(yè)務(wù)需要,項(xiàng)目中集成了mqtt服務(wù),在mqtt連接中需要設(shè)置個(gè)回調(diào)類,這個(gè)回調(diào)類定義為一個(gè)普通類,不通過(guò)Spring管理,但是在回調(diào)類中又需要引入數(shù)據(jù)庫(kù)的操作,
采用通過(guò)注解引入的數(shù)據(jù)庫(kù)框架類服務(wù),顯然不能通過(guò)簡(jiǎn)單的new Object() 來(lái)進(jìn)行調(diào)用,因此需要采用一種方式引入已經(jīng)注入的Bean:
通過(guò)各種嘗試以及驗(yàn)證,找到了一種可行的方案
如下所示:
聲明一個(gè)自定義的類
定義一個(gè)ApplicationContext對(duì)象 ,在需要操作的函數(shù)中,通過(guò)ApplicationContext對(duì)象引入注入的類即可:
public class MyTest{
private static ApplicationContext applicationContext;
public static void setApplicationContext(ApplicationContext context) {
applicationContext = context;
}
public static void doSomething() {
RestTemplate _restTemplate = applicationContext.getBean(RestTemplate.class);
........
}
}
在啟動(dòng)類中
得到ApplicationContext 對(duì)象,然后傳遞到自定義的類中,注意——只能在這個(gè)地方傳入,否則無(wú)法正確獲取ApplicationContext 對(duì)象;
@SpringBootApplication
public class Application{
public static void main(String[] args) {
final ApplicationContext applicationContext =
SpringApplication.run(Application.class, args);
MyTest.setApplicationContext(applicationContext);
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java解決LocalDateTime傳輸前端為時(shí)間的數(shù)組
本文主要介紹了Java解決LocalDateTime傳輸前端為時(shí)間的數(shù)組,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03
分析Spring框架之設(shè)計(jì)與實(shí)現(xiàn)資源加載器
Spring框架是由于軟件開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。然而,Spring的用途不僅僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合性角度而言,絕大部分Java應(yīng)用都可以從Spring中受益。今天來(lái)分析它的設(shè)計(jì)與實(shí)現(xiàn)資源加載器,從Spring.xml解析和注冊(cè)Bean對(duì)象2021-06-06
SpringCloud Finchley+Spring Boot 2.0 集成Consul的方法示例(1.2版本)
這篇文章主要介紹了SpringCloud Finchley+Spring Boot 2.0 集成Consul的方法示例(1.2版本),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Java Spring ApplicationEvent 代碼示例解析
本文解析了Spring事件機(jī)制,涵蓋核心概念(發(fā)布-訂閱/觀察者模式)、代碼實(shí)現(xiàn)(事件定義、發(fā)布、監(jiān)聽(tīng))及高級(jí)應(yīng)用(異步處理、事務(wù)綁定、執(zhí)行順序),對(duì)Java Spring ApplicationEvent概念相關(guān)知識(shí)感興趣的朋友一起看看吧2025-06-06
Java BufferedImage轉(zhuǎn)換為MultipartFile方式
這篇文章主要介紹了Java BufferedImage轉(zhuǎn)換為MultipartFile方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
SpringBoot執(zhí)行異步任務(wù)Async介紹
這篇文章主要為大家介紹了SpringBoot執(zhí)行異步任務(wù)Async示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Java線程中斷及線程中斷的幾種使用場(chǎng)景小結(jié)
在并發(fā)編程中,合理使用線程中斷機(jī)制可以提高程序的魯棒性和可維護(hù)性,本文主要介紹了Java線程中斷及線程中斷的幾種使用場(chǎng)景小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
關(guān)于Java8的foreach中使用return/break/continue產(chǎn)生的問(wèn)題
這篇文章主要介紹了關(guān)于Java8的foreach()中使用return/break/continue產(chǎn)生的問(wèn)題,在使用foreach()處理集合時(shí)不能使用break和continue這兩個(gè)方法,也就是說(shuō)不能按照普通的for循環(huán)遍歷集合時(shí)那樣根據(jù)條件來(lái)中止遍歷,需要的朋友可以參考下2023-10-10

