我需要获取我在应用程序中明确创建的所有bean。 当调用applicationContext.getBeanDefinitionNames()时,我得到了一个Bean名称列表,但是其中很多不是由我而是由Spring显式创建的,我对此并不感兴趣。 目前没有可用于过滤的命名规则,因为不是Spring注入的所有bean都以“ org.springframework”开头。
image-20200901213959957.png使用 applicationContext.getBeanDefinitionNames
并按我的根软件包名称过滤Bean(此解决方案也适用于其他用例,例如,如果我想获取在某个软件包下定义的所有Bean)。
@SpringBootApplication
public class PracticeApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(PracticeApplication.class, args);
List<Object> myBeans = Arrays.stream(applicationContext.getBeanDefinitionNames())
.filter(beanName -> applicationContext.getBean(beanName).getClass().getPackage().getName().startsWith("com.jiaflu.practice.controller"))
.map(applicationContext::getBean)
.collect(Collectors.toList());
System.out.println(myBeans);
}
}
image-20200901215341461.png
网友评论