SpringBoot獲取Bean的方法

SpringBoot作為經典的Java開發框架,其注重的Bean對象佔據了其編程思想的核心部分。對於初學者和開發者而言,正確快速地獲取Bean對象是關鍵步驟之一。本文將從多個方面來詳細介紹SpringBoot獲取Bean對象的方法及注意事項。

一、SpringBoot獲取Bean對象

在SpringBoot中,Bean對象是一個普通的Java對象,通過Bean對象我們可以訪問一個應用程序中的所有對象。Spring Boot將這些Bean對象註冊到ApplicationContext對象中。可以通過以下兩種方法獲取Bean對象:

  1. 使用註解來自動裝配Bean
  2. 使用ApplicationContext獲取Bean

下面我們分別介紹這兩種方法:

1.使用註解來自動裝配Bean

使用註解配置Bean對象是SpringBoot開發中非常常見的做法。

// 定義一個Bean對象
@Service
public class UserService {
    public void add(String username, String password) {
        System.out.println("添加用戶:" + username);
    }
}

使用註解來獲取Bean對象也是非常簡單的,只需要在需要獲取對象的位置使用@Autowired註解即可:

// 獲取UserService Bean
@Autowired
private UserService userService;

注意事項:

  • 使用註解獲取Bean對象必須在SpringBoot啟動類上添加@ComponentScan註解。
  • 使用註解獲取Bean對象時,Bean的作用域必須為單例(Singleton),否則會出現Bean創建多份的情況。

2.使用ApplicationContext獲取Bean

使用ApplicationContext也是SpringBoot獲取Bean對象的常用方法之一。ApplicationContext是Spring Framework中的核心介面,其提供了訪問Bean工廠的方法。

首先,我們需要在SpringBoot啟動類中創建一個ApplicationContext對象:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(Application.class, args);
    }
}

在代碼中通過ApplicationContext.getBean方法獲取Bean對象:

ApplicationContext context = SpringApplication.run(Application.class, args);
UserService userService= context.getBean(UserService.class);

注意事項:

  • 使用ApplicationContext獲取Bean對象必須在SpringBoot啟動類上添加@ComponentScan註解。
  • 使用ApplicationContext獲取Bean對象時,Bean的作用域必須為單例(Singleton),否則會出現Bean創建多份的情況。

二、SpringBoot獲取Bean的Method

SpringBoot提供了很多用於獲取Bean對象的方法。下面我們分別介紹常用的幾種方法:

1.使用getBean方法獲取Bean對象

我們可以使用ApplicationContext的getBean方法獲取Bean對象。

ApplicationContext context = SpringApplication.run(Application.class, args);
UserService userService = context.getBean(UserService.class);

注意事項:

  • 使用getBean方法必須知道需要獲取Bean對象的類型,也就是必須使用Class對象來指定。
  • 若容器中存在多個該類型的Bean對象,則需要使用@Bean註解來指定需要獲取的Bean。

2.使用autowireCapableBeanFactory對象獲取Bean對象

我們可以通過autowireCapableBeanFactory對象獲取Bean對象,該對象是ApplicationContext對象的一部分。

ApplicationContext context = SpringApplication.run(Application.class, args);
UserService userService = context.getAutowireCapableBeanFactory().createBean(UserService.class);

注意事項:

  • 使用autowireCapableBeanFactory對象可以直接通過類對象創建Bean對象,但要注意該對象只能獲取Prototype類型的Bean對象,Singleton類型的Bean對象需要使用其他方法獲取。

三、SpringBoot獲取Bean工具類

SpringBoot為我們提供了很多方便的工具類來獲取Bean對象。下面我們來分別介紹幾個常用的工具類:

1.BeanFactoryUtils

BeanFactoryUtils是獲取Bean的工具類,其提供了多種獲取Bean對象的方法。

 
// 根據名稱獲取Bean對象
UserService userService = BeanFactoryUtils.beanOfType(context, UserService.class);

注意事項:

  • 使用BeanFactoryUtils對象必須知道需要獲取Bean對象的類型,在根據名稱獲取時也需要知道Bean的名稱。

2.ApplicationContextProvider

ApplicationContextProvider是獲取ApplicationContext的工具類,其提供了獲取ApplicationContext對象的方法。

 
// 獲取ApplicationContext對象
ApplicationContext context = ApplicationContextProvider.getApplicationContext();
UserService userService = context.getBean(UserService.class);

使用ApplicationContextProvider對象獲取ApplicationContext對象時,需要注意其在應用程序啟動時才能獲取到,否則將返回null對象。

四、SpringBoot獲取BeanFactory

在SpringBoot中,我們可以通過ApplicationContext對象獲取BeanFactory對象。BeanFactory是SpringFramework中的核心介面,其管理著Bean對象的生命周期。

 
ApplicationContext context = SpringApplication.run(Application.class, args);
BeanFactory factory = context.getAutowireCapableBeanFactory();
UserService userService = factory.createBean(UserService.class);

注意事項:

  • 使用BeanFactory後,需要使用factory.destroyBean方法進行Bean對象的銷毀。

五、SpringBoot獲取位置

在SpringBoot中,我們可以通過ResourceLoader獲取應用程序上下文的位置。

 
ResourceLoader resourceLoader = new DefaultResourceLoader();
Resource resource = resourceLoader.getResource("classpath:application.properties");

注意事項:

  • 使用ResourceLoader時,使用的路徑不同會導致獲取位置的方式也不同。

六、SpringBoot獲取URL

在SpringBoot中,我們可以使用ServletUriComponentsBuilder獲取當前URL對象,並且可以添加參數、路徑等參數。

 
URI uri = ServletUriComponentsBuilder.fromCurrentRequest().build().toUri();

注意事項:

  • 使用ServletUriComponentsBuilder獲取當前URL的方法需要在HTTP請求時使用。

七、SpringBoot獲取被註解的類

使用SpringBoot獲取被註解的類是非常常見的需求,SpringBoot通過ClassPathScanningCandidateComponentProvider提供了獲取指定註解類的方法。

 
// 獲取被註解的類
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
scanner.addIncludeFilter(new AnnotationTypeFilter(Service.class));
Set beanDefinitionSet = scanner.findCandidateComponents("com.example.service");

注意事項:

  • 使用ClassPathScanningCandidateComponentProvider獲取被註解類時必須知道被註解的類類型。
  • 使用時需要按照包名路徑進行填寫,不要填寫完整路徑。

八、SpringBoot獲取本機IP

在SpringBoot中,我們可以使用InetAddress.getLocalHost()獲取本機IP對象。

 
// 獲取本機IP
InetAddress address = InetAddress.getLocalHost(); 

九、SpringBoot獲取本機IP和埠

在SpringBoot中,我們可以使用ServerProperties來獲取本機的IP地址和埠號。

 
// 獲取本機IP和埠
@Autowired
private ServerProperties serverProperties;
public void get() {
  String ip = serverProperties.getAddress().getHostAddress();
  int port = serverProperties.getPort();
}

總結

本文分別從SpringBoot獲取Bean對象、獲取Bean方法、獲取Bean工具類、獲取BeanFactory、獲取位置、獲取URL、獲取被註解的類、獲取本機IP和埠等方面詳細介紹了SpringBoot獲取Bean對象的方法及注意事項。希望本文能為廣大讀者提供實用的技術支持,幫助初學者和開發者更好地理解和使用SpringBoot框架。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/283617.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 08:08
下一篇 2024-12-22 08:08

相關推薦

  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進位的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進位。 一、AES加密介紹 AE…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有著廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python學習筆記:去除字元串最後一個字元的方法

    本文將從多個方面詳細闡述如何通過Python去除字元串最後一個字元,包括使用切片、pop()、刪除、替換等方法來實現。 一、字元串切片 在Python中,可以通過字元串切片的方式來…

    編程 2025-04-29
  • 用法介紹Python集合update方法

    Python集合(set)update()方法是Python的一種集合操作方法,用於將多個集合合併為一個集合。本篇文章將從以下幾個方面進行詳細闡述: 一、參數的含義和用法 Pyth…

    編程 2025-04-29

發表回復

登錄後才能評論