Wicket's SpringWebApplication is deprecated and the javadoc advocates
using @SpringBean to inject dependencies at component level. However,
that appears to be an expensive proposition:

I have a listView component that renders a (new) ExternalLink subclass
per item. That subclass uses a service (a singleton spring bean)
injected via @SpringBean like so:

@SpringBean
private MyService service;

YourKit tells me that when the page is being rendered, 47%(!) of cpu
time is being spent constructing the subclass, specifically,
repeatedly calling:
org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(ListableBeanFactory,
Class)

The above is getting called with vigor from
SpringBeanLocator.hashCode() --> getBeanName() -->
getBeanNameOfClass(). HashCode() is likely getting called most often
by AnnotProxyFieldValueFactory.cache during look-ups - which I am
guessing isn't intentional. Looks like a bug, no?

If the above is a bug indeed, is the workaround to always specify a
'name' with @SpringBean?

Thoughts?
-nikita
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+-----------------+
|
            Name
                            |   Time (ms)    |  Own Time (ms)  |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+-----------------+
|  
+---com.castanealabs.gui.component.search.CategoryDataViewPanel$1.populateItem(Item)

           |  5,430  100 %  |             50  |
|    |

                            |                |                 |
|    +---com.castanealabs.gui.component.search.ProductImageCell.<init>(String,
SiteId, IModel)
                    |  2,680   49 %  |             20  |
|    | |

                            |                |                 |
|    | 
+---com.castanealabs.gui.embedded.ExternalSiteProductInfoLink.<init>(String,
SiteId, IModel)
               |  2,660   49 %  |              0  |
|    |   |

                            |                |                 |
|    |   
+---com.castanealabs.gui.embedded.ExternalSiteProductInfoLink.<init>(String,
SiteId, IModel, IModel)
             |  2,660   49 %  |              0  |
|    |     |

                            |                |                 |
|    |     +---com.castanealabs.gui.embedded.TargetedExternalLink.<init>(String,
IModel, IModel, String)
                  |  2,570   47 %  |              0  |
|    |     | |

                            |                |                 |
|    |     | +---org.apache.wicket.markup.html.link.ExternalLink.<init>(String,
IModel, IModel)
                   |  2,570   47 %  |              0  |
|    |     |   |

                            |                |                 |
|    |     |   
+---org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(ListableBeanFactory,
Class)                                      |  2,570   47 %  |
     0  |
|    |     |     |

                            |                |                 |
|    |     |
+---org.springframework.context.support.AbstractApplicationContext.getBeanNamesForType(Class)
                                                           |  2,570
47 %  |              0  |
|    |     |       |

                            |                |                 |
|    |     |
+---org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(Class)
                                                   |  2,570   47 %  |
           10  |
|    |     |         |

                            |                |                 |
|    |     |
+---org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(Class,
boolean, boolean)                                |  2,560   47 %  |
          0  |
|    |     |           |

                            |                |                 |
|    |     |
+---org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(String,
RootBeanDefinition)                                        |  2,460
45 %  |             10  |
|    |     |           | |

                            |                |                 |
|    |     |           |
+---org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(String,
RootBeanDefinition, Class[])            |  2,420   45 %  |
100  |
|    |     |           | | |

                            |                |                 |
|    |     |           | |
+---org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(String,
RootBeanDefinition, Class[])  |  1,750   32 %  |              0  |
|    |     |           | | | |

                            |                |                 |
|    |     |           | | |
+---org.springframework.util.ReflectionUtils.getAllDeclaredMethods(Class)
                                                                   |
1,490   27 %  |             20  |
|    |     |           | | | | |

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to