获取并打印Spring容器中所有的Bean名称

获取并打印Spring容器中所有的Bean名称


思路:

  • 实现Spring的ApplicationContextAware接口,重写setApplicationContext方法,将得到的ApplicationContext对象保存到一个静态变量中,有了这个上下文对象,就可以在项目的任意地方用它来得到任意Bean

  • 调用applicationContext.getBeanDefinitionNames()方法就可以拿到Spring容器中所有的Bean名称;这里为了测试方便就直接在InitializingBean 接口的afterPropertiesSet方法中打印所有Bean名称;启动Spring容器,观察控制台即可看到打印结果,打印Spring容器中所有Bean在项目调试的时候很有用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.InitializingBean;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

import org.springframework.stereotype.Component;



/**

* 打印Spring容器所有的Bean名称

*

* @author syj

*/

@Component

public class ApplicationContextBean implements ApplicationContextAware, InitializingBean {



public static ApplicationContext applicationContext;



/**

* 获取 ApplicationContext

*

* @param applicationContext

* @throws BeansException

*/

@Override

public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

ApplicationContextBean.applicationContext = applicationContext;

}



/**

* 打印IOC容器中所有的Bean名称

*

* @throws Exception

*/

@Override

public void afterPropertiesSet() throws Exception {

String[] names = applicationContext.getBeanDefinitionNames();

for (String name : names) {

System.out.println(">>>>>>" + name);

}

System.out.println("------\nBean 总计:" + applicationContext.getBeanDefinitionCount());
}

}
  • 还有一种更简单的方式,直接使用@Autowired注入ApplicationContext对象:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.ApplicationContext;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;



import java.util.Arrays;

import java.util.List;



@RestController

@RequestMapping

public class BeanController {



@Autowired

private ApplicationContext applicationContext;



@GetMapping("/beanList")

public List<String> beanList() {

return Arrays.asList(applicationContext.getBeanDefinitionNames());

}

}