@Component
public class Example {
@EventListener
public void contextRefreshed(ContextRefreshedEvent event) {
// Could also just autowire the context directly
GenericApplicationContext context = (GenericApplicationContext) event.getApplicationContext();
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
String[] beanNames = beanFactory.getBeanDefinitionNames();
for(String beanName : beanNames) {
String[] dependentBeanNames = beanFactory.getDependentBeans(beanName);
if (dependentBeanNames.length <= 0) {
// bean with nothing depending on it
}
}
}
}
1条答案
按热度按时间jq6vz3qz1#
在configurablebeanfactory#getdependentbeans javadoc中,我看到有一个方法可以调用,以获得一个bean数组,该数组依赖于我们提供的bean名称。追溯到我们如何得到豆子工厂。如果你能得到一个
GenericApplicationContext
:从上下文中获取bean工厂。
遍历bean工厂中的bean定义名称。
呼叫
ConfigurableBeanFactory::getDependentBeans
看看是否有什么依赖于它。编辑:这个解决方案并不完美,但可能是一个有用的起点。有些bean可能不依赖于它,但在应用程序中使用。一个很好的例子就是控制器(用
@Controller
). 从我测试的结果来看,它有0个依赖bean,但是它所拥有的请求Map方法显然是以某种方式被执行和引用的。