0

I use Spring Boot and have problem with beans instantiating (they created twice).

How can I find reference to ApplicationContext from bean reference in OQL query? In other word find out holding Context for given bean.

PS Basic troubleshooting query in VisualVM:

heap.objects("org.springframework.context.support.AbstractApplicationContext")
heap.objects("org.springframework.core.io.DefaultResourceLoader")
trincot
  • 317,000
  • 35
  • 244
  • 286
gavenkoa
  • 45,285
  • 19
  • 251
  • 303

1 Answers1

0

Find beans instances by bean name per ApplicationContext::

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};
})

Find beans instances by class name per ApplicationContext::

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};
})

If Spring change underlying implementation these queries should be adjusted. Look for fields:

heap.objects("org.springframework.context.support.AbstractApplicationContext")
gavenkoa
  • 45,285
  • 19
  • 251
  • 303