0

我使用 Spring Boot 并且在实例化 bean 时遇到问题(它们创建了两次)。

如何从 OQL 查询中的 bean 引用中找到对 ApplicationContext 的引用?换句话说,找出持有给定 bean 的上下文。

VisualVM 中的PS 基本故障排除查询:

heap.objects("org.springframework.context.support.AbstractApplicationContext")
heap.objects("org.springframework.core.io.DefaultResourceLoader")
4

1 回答 1

0

ApplicationContext按每个::的 bean 名称查找 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")
于 2017-03-23T11:42:38.830 回答