欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Spring Boot獲取bean的3種方式

 更新時(shí)間:2023年04月21日 10:38:21   作者:link可  
這篇文章主要介紹了關(guān)于Spring Boot獲取bean的3種方式,在spring中ApplicationContext這個(gè)上下文對(duì)象是獲取bean的基礎(chǔ),需要的朋友可以參考下

在使用spring框架中我們都知道,某個(gè)類(lèi)如果使用了@Service、@Autowire 這種依賴(lài)注入的方式引用了其他對(duì)象,在另外一個(gè)類(lèi)中,只有通過(guò)spring的IOC容重中獲取這個(gè)類(lèi)的實(shí)例時(shí),那些被依賴(lài)的對(duì)象才能正確被初始化,否則那些被依賴(lài)的對(duì)象都是null。 

所以就有一個(gè)問(wèn)題,在普通類(lèi)中如何獲取spring ioc容器中的bean(spring托管的bean)。

我們都知道,在spring中ApplicationContext這個(gè)上下文對(duì)象是獲取bean的基礎(chǔ)。

在spring boot中,我們可以通過(guò)下面的三種方式來(lái)獲取Bean。

方式一 注解@PostConstruct

PostConstruct 注釋用于在依賴(lài)關(guān)系注入完成之后需要執(zhí)行的方法上,以執(zhí)行任何初始化。此方法必須在將類(lèi)放入服務(wù)之前調(diào)用。

支持依賴(lài)關(guān)系注入的所有類(lèi)都必須支持此注釋。即使類(lèi)沒(méi)有請(qǐng)求注入任何資源,用 PostConstruct 注釋的方法也必須被調(diào)用。只有一個(gè)方法可以用此注釋進(jìn)行注釋。

應(yīng)用 PostConstruct 注釋的方法必須遵守以下所有標(biāo)準(zhǔn):

該方法不得有任何參數(shù),除非是在 EJB 攔截器 (interceptor) 的情況下,根據(jù) EJB 規(guī)范的定義,在這種情況下它將帶有一個(gè) InvocationContext 對(duì)象 ;
該方法的返回類(lèi)型必須為 void;
該方法不得拋出已檢查異常;
應(yīng)用 PostConstruct 的方法可以是 public、protected、package private 或 private;
除了應(yīng)用程序客戶端之外,該方法不能是 static;
該方法可以是 final;
如果該方法拋出未檢查異常,那么不得將類(lèi)放入服務(wù)中,除非是能夠處理異常并可從中恢復(fù)的 EJB。

方式二 啟動(dòng)類(lèi)ApplicationContext

實(shí)現(xiàn)方式:在springboot的啟動(dòng)類(lèi)中,定義static變量ApplicationContext,利用容器的getBean方法獲得依賴(lài)對(duì)象。推薦一個(gè) Spring Boot 基礎(chǔ)教程及實(shí)戰(zhàn)示例:https://github.com/javastacks/javastack

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
/**
 * @author: clx
 * @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
 * @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

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
 * @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);
}

到此這篇關(guān)于關(guān)于Spring Boot獲取bean的3種方式的文章就介紹到這了,更多相關(guān)Spring Boot獲取bean內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java持久化框架Hibernate與Mybatis優(yōu)劣及選擇詳解

    Java持久化框架Hibernate與Mybatis優(yōu)劣及選擇詳解

    這篇文章主要介紹了Java持久化框架Hibernate與Mybatis優(yōu)劣及選擇詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • C# 數(shù)據(jù)類(lèi)型轉(zhuǎn)換

    C# 數(shù)據(jù)類(lèi)型轉(zhuǎn)換

    這篇文章主要講解C語(yǔ)言中基本數(shù)據(jù)類(lèi)型、字符串與其它數(shù)據(jù)類(lèi)型以及常見(jiàn)的日期類(lèi)型的轉(zhuǎn)換,希望能給大家做一個(gè)參考。希望能夠給你帶來(lái)幫助
    2021-07-07
  • Java加載property文件配置過(guò)程解析

    Java加載property文件配置過(guò)程解析

    這篇文章主要介紹了java加載property文件配置過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • springboot+redis自定義注解實(shí)現(xiàn)發(fā)布訂閱的實(shí)現(xiàn)代碼

    springboot+redis自定義注解實(shí)現(xiàn)發(fā)布訂閱的實(shí)現(xiàn)代碼

    在Redis中客戶端可以通過(guò)訂閱特定的頻道來(lái)接收發(fā)送至該頻道的消息,本文主要介紹了springboot+redis自定義注解實(shí)現(xiàn)發(fā)布訂閱,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Java?Controller實(shí)現(xiàn)參數(shù)驗(yàn)證與統(tǒng)一異常處理流程詳細(xì)講解

    Java?Controller實(shí)現(xiàn)參數(shù)驗(yàn)證與統(tǒng)一異常處理流程詳細(xì)講解

    Controller是Spring接受并處理網(wǎng)頁(yè)請(qǐng)求的組件,是整個(gè)應(yīng)用的入口,因此學(xué)會(huì)Controller的常用注解對(duì)理解一個(gè)應(yīng)用是重中之重。SpringBoot的Controller中經(jīng)常會(huì)用到注解@Controller、@RestController、@RequestMapping、@RequestBody等
    2023-01-01
  • Java 實(shí)戰(zhàn)項(xiàng)目之在線點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項(xiàng)目之在線點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)流程

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)在線點(diǎn)餐系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • java反射超詳細(xì)講解

    java反射超詳細(xì)講解

    本文非常詳細(xì)的講解了java反射具體的內(nèi)容以及使用,java反射在現(xiàn)今的使用中很頻繁,希望此文可以幫大家解答疑惑,可以幫助大家理解
    2021-08-08
  • 從dubbo zookeeper注冊(cè)地址提取出zookeeper地址的方法

    從dubbo zookeeper注冊(cè)地址提取出zookeeper地址的方法

    今天小編就為大家分享一篇關(guān)于從dubbo zookeeper注冊(cè)地址提取出zookeeper地址的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 使用EasyPoi輕松導(dǎo)入導(dǎo)出Excel文檔的方法示例

    使用EasyPoi輕松導(dǎo)入導(dǎo)出Excel文檔的方法示例

    這篇文章主要介紹了使用EasyPoi輕松導(dǎo)入導(dǎo)出Excel文檔的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Springboot如何使用OSHI獲取和操作系統(tǒng)和硬件信息

    Springboot如何使用OSHI獲取和操作系統(tǒng)和硬件信息

    這篇文章主要介紹了Springboot如何使用OSHI獲取和操作系統(tǒng)和硬件信息問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評(píng)論