詳解SpringBoot靜態(tài)方法獲取bean的三種方式
方式一 注解@PostConstruct
import com.example.javautilsproject.service.AutoMethodDemoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; /** * springboot靜態(tài)方法獲取 bean 的三種方式(一) * @author: clx * @date: 2019/7/23 * @version: 1.1.0 */ @Component public class StaticMethodGetBean_1 { @Autowired private AutoMethodDemoService autoMethodDemoService; @Autowired private static AutoMethodDemoService staticAutoMethodDemoService; @PostConstruct public void init() { staticAutoMethodDemoService = autoMethodDemoService; } public static String getAuthorizer() { return staticAutoMethodDemoService.test(); } }
注解@PostConstruct說明
PostConstruct 注釋用于在依賴關(guān)系注入完成之后需要執(zhí)行的方法上,以執(zhí)行任何初始化。此方法必須在將類放入服務(wù)之前調(diào)用。支持依賴關(guān)系注入的所有類都必須支持此注釋。即使類沒有請(qǐng)求注入任何資源,用 PostConstruct 注釋的方法也必須被調(diào)用。只有一個(gè)方法可以用此注釋進(jìn)行注釋。
應(yīng)用 PostConstruct 注釋的方法必須遵守以下所有標(biāo)準(zhǔn):
- 該方法不得有任何參數(shù),除非是在 EJB 攔截器 (interceptor) 的情況下,根據(jù) EJB 規(guī)范的定義,在這種情況下它將帶有一個(gè) InvocationContext 對(duì)象 ;
- 該方法的返回類型必須為 void;
- 該方法不得拋出已檢查異常;
- 應(yīng)用 PostConstruct 的方法可以是 public、protected、package private 或 private;
- 除了應(yīng)用程序客戶端之外,該方法不能是 static;
- 該方法可以是 final;
- 如果該方法拋出未檢查異常,那么不得將類放入服務(wù)中,除非是能夠處理異常并可從中恢復(fù)的 EJB。
方式二 啟動(dòng)類ApplicationContext
實(shí)現(xiàn)方式:在springboot的啟動(dòng)類中,定義static變量ApplicationContext,利用容器的getBean方法獲得依賴對(duì)象
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; /** * @author: clx * @date: 2019/7/23 * @version: 1.1.0 */ @SpringBootApplication public class Application { public static ConfigurableApplicationContext ac; public static void main(String[] args) { ac = SpringApplication.run(Application.class, args); } }
調(diào)用方式
/** * @author: clx * @date: 2019/7/23 * @version: 1.1.0 */ @RestController public class TestController { /** * 方式二 */ @GetMapping("test2") public void method_2() { AutoMethodDemoService methodDemoService = Application.ac.getBean(AutoMethodDemoService.class); String test2 = methodDemoService.test2(); System.out.println(test2); } }
方式三 手動(dòng)注入ApplicationContext
手動(dòng)注入ApplicationContext
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * springboot靜態(tài)方法獲取 bean 的三種方式(三) * @author: clx * @date: 2019/7/23 * @version: 1.1.0 */ @Component public class StaticMethodGetBean_3<T> implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { StaticMethodGetBean_3.applicationContext = applicationContext; } public static <T> T getBean(Class<T> clazz) { return applicationContext != null?applicationContext.getBean(clazz):null; } }
調(diào)用方式
/** * 方式三 */ @Test public void method_3() { AutoMethodDemoService autoMethodDemoService = StaticMethodGetBean_3.getBean(AutoMethodDemoService.class); String test3 = autoMethodDemoService.test3(); System.out.println(test3); }
以上三種方式樓主都測(cè)試過可以為完美使用
到此這篇關(guān)于詳解SpringBoot靜態(tài)方法獲取bean的三種方式的文章就介紹到這了,更多相關(guān)SpringBoot靜態(tài)方法獲取bean內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的實(shí)例代碼
這篇文章主要介紹了Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的實(shí)例代碼,代碼分為哦簡(jiǎn)單版和復(fù)雜版,需要的朋友可以參考下2019-04-04SpringBoot配置主從數(shù)據(jù)庫實(shí)現(xiàn)讀寫分離
現(xiàn)在的 Web 應(yīng)用大都是讀多寫少,本文主要介紹了SpringBoot配置主從數(shù)據(jù)庫實(shí)現(xiàn)讀寫分離,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11