我使用 Spring Boot 并且 bean 实例化有问题(他们创建了两次(。
如何从 OQL 查询中的 Bean 引用中找到对应用程序上下文的引用?换句话说,找出为给定的豆子持有上下文。
附言可视化虚拟机中的基本故障排除查询:
heap.objects("org.springframework.context.support.AbstractApplicationContext")
heap.objects("org.springframework.core.io.DefaultResourceLoader")
按 Bean 名称查找每个ApplicationContext
的 bean 实例 ::
map(heap.objects("org.springframework.context.support.AbstractApplicationContext"), function(it) {
var fact = it.beanFactory;
var tbl = fact.singletonObjects.table;
var beans = map(filter(tbl, "it && /Step$/.test(it.key)"), "{key: it.key, val: it.val}");
return {ctx: it, beans: beans};
})
按类名查找每个ApplicationContext
的 bean 实例 ::
map(heap.objects("org.springframework.context.support.AbstractApplicationContext"), function(it) {
var fact = it.beanFactory;
var tbl = fact.singletonObjects.table;
var beans = map(filter(tbl, "it && /^com.bigbrother/.test(classof(it.val).name)"), "{key: it.key, val: it.val}");
return {ctx: it, beans: beans};
})
如果 Spring 更改了底层实现,则应调整这些查询。查找字段:
heap.objects("org.springframework.context.support.AbstractApplicationContext")