Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
Description
AnnotProxyFieldValueFactory holds a cache of proxies for singleton beans. The cache is checked like this:
// only check the cache if the bean is a singleton
if (locator.isSingletonBean() && cache.containsKey(locator))
However, when the bean is referenced by type rather than by name (the default and common case), 'locator.isSingletonBean()' is a quite expensive operation, because it looks up the bean name by type (it indirectly calls BeanFactoryUtils.beanNamesForTypeIncludingAncestors()).
I think the call to locator.isSingletonBean() should either be omitted entirely (the cache only contains singleton proxies anyway), or omitted when annot.name() is blank.