Springboot啟動了哪些bean?這兩種方式可以獲取

westwolf發表於2021-09-09

1. 概述

在本文中,我們將探索在容器中獲取所有spring管理的bean的相關技術。這有神馬用?主要是用於排查問題。一般都是我們建立的某一個bean沒有啟動的問題。畢竟工作中總是會遇到各種各樣的bug。提前瞭解一些沒有壞處。

2. IoC容器

bean是spring管理的應用程式的基礎,所有bean都駐留在IOC容器中,該容器負責管理它們的生命週期。

我們可以透過兩種方式獲取該容器內所有bean的列表:

  1. 使用ListableBeanFactory介面
  2. 使用Spring Boot Actuator

3.使用ListableBeanFactory介面

ListableBeanFactory介面提供了getBeanDefinitionNames()方法,該方法返回在這個工廠中定義的所有bean的名稱。您可以在官方文件中找到所有已知子介面及其實現類的列表。我們來看這種方式如何獲取所有的bean。

第一步:建立一個Controller

@Controller
public class FooController {
    @Autowired
    private FooService fooService;
    @RequestMapping(value="/displayallbeans")
    public String getHeaderAndBody(Map model){
        model.put("header", fooService.getHeader());
        model.put("message", fooService.getBody());
        return "displayallbeans";
    }
}

這個Controller依賴於另一個FooService。

第二步:建立Service

@Service
public class FooService {
    public String getHeader() {
        return "Display All Beans";
    }
    public String getBody() {
        return "展示所有beans的案例";
    }
}

注意,我們在這裡建立了兩個不同的bean:

  • fooController

  • fooService

這裡使用applicationContext物件並呼叫它的getBeanDefinitionNames()方法,該方法將返回applicationContext容器中的所有bean:

第三步:設定SpringBootApplication啟動類

@SpringBootApplication
public class DemoApplication {
    private static ApplicationContext applicationContext;
    public static void main(String[] args) {
        applicationContext = SpringApplication.run(DemoApplication.class, args);
        displayAllBeans();
    }
    public static void displayAllBeans() {
        String[] allBeanNames = applicationContext.getBeanDefinitionNames();
        for(String beanName : allBeanNames) {
            System.out.println(beanName);
        }
    }
}

第四步:測試列印

這將列印applicationContext容器中的所有bean:

圖片描述

注意,除了我們定義的bean之外,它還將記錄該容器中的所有其他bean。為了清楚起見,我們在這裡省略了它們,因為它們有很多。

4. 使用Spring Boot Actuator

Spring Boot Actuator提供了用於監控應用程式統計資訊的端點。下面看看這種方式:

第一步:新增依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

第二步:修改application.properties

management.endpoints.web.exposure.include=*

把上面程式碼新增到properties檔案中。

第三步:使用釋出端點檢視

圖片描述

由於這裡的Actuator沒有配置,所以顯示的比較亂。關於Actuator的配置,會在下一篇文章中呈現。

5. 結論

在本文中,我們瞭解瞭如何使用ListableBeanFactory介面和Spring Boot Actuator在Spring IoC容器中顯示所有bean。希望對你有點幫助。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4662/viewspace-2826789/,如需轉載,請註明出處,否則將追究法律責任。

相關文章