獲取並打印Spring容器中所有的Bean名稱


思路:

  1.實現Spring的ApplicationContextAware接口,重寫setApplicationContext方法,將得到的ApplicationContext對象保存到一個靜態變量中,有了這個上下文對象,就可以在項目的任意地方用它來得到任意Bean;

  2.調用applicationContext.getBeanDefinitionNames()方法就可以拿到Spring容器中所有的Bean名稱;這里為了測試方便就直接在InitializingBean 接口的afterPropertiesSet方法中打印所有Bean名稱;啟動Spring容器,觀察控制台即可看到打印結果,打印Spring容器中所有bean在項目調試的時候很有用。

 1 import org.springframework.beans.BeansException;
 2 import org.springframework.beans.factory.InitializingBean;
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.ApplicationContextAware;
 5 import org.springframework.stereotype.Component;
 6 
 7 /**
 8  * 打印Spring容器所有的Bean名稱
 9  *
10  * @author syj
11  */
12 @Component
13 public class ApplicationContextBean implements ApplicationContextAware, InitializingBean {
14 
15     public static ApplicationContext applicationContext;
16 
17     /**
18      * 獲取 ApplicationContext
19      *
20      * @param applicationContext
21      * @throws BeansException
22      */
23     @Override
24     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
25         ApplicationContextBean.applicationContext = applicationContext;
26     }
27 
28     /**
29      * 打印IOC容器中所有的Bean名稱
30      *
31      * @throws Exception
32      */
33     @Override
34     public void afterPropertiesSet() throws Exception {
35         String[] names = applicationContext.getBeanDefinitionNames();
36         for (String name : names) {
37             System.out.println(">>>>>>" + name);
38         }
39         System.out.println("------\nBean 總計:" + applicationContext.getBeanDefinitionCount());
40     }
41 }

 

還有一種更簡單的方式,直接使用@Autowired注入ApplicationContext對象:

 1 import org.springframework.beans.factory.annotation.Autowired;
 2 import org.springframework.context.ApplicationContext;
 3 import org.springframework.web.bind.annotation.GetMapping;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RestController;
 6 
 7 import java.util.Arrays;
 8 import java.util.List;
 9 
10 @RestController
11 @RequestMapping
12 public class BeanController {
13 
14     @Autowired
15     private ApplicationContext applicationContext;
16 
17     @GetMapping("/beanList")
18     public List<String> beanList() {
19         return Arrays.asList(applicationContext.getBeanDefinitionNames());
20     }
21 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM