Oliver Drotbohm opened SPR-13986 and commented

There are a couple of FactoryBean implementations that produce proxy instances and the the type of the proxy to be created configured. Examples of that are the FactoryBean implementations for remoting proxies, the JndiObjectFactoryBean and RepositoryFactoryBeanSupport in Spring Data.

Factories that are build that way cannot be detected by target type until they're initialized which can be a problem if the BeanDefinition instances for them are supposed to be found e.g. in a BeanFactoryPostProcessor.

Spring Data currently deploys a InstantiationAwareBeanPostProcessor to predict the bean type based on the BeanDefinition setup, interpreting a certain property value as the type which that bean definition will eventually end up in. However, the lookup issue also pops up in the context of collecting BeanDefinition instances for EntityManager (in the course of some code to allow constructor injection of them) in case the EntityManager is provided by a JndiObjectFactoryBean.

While I can of course extract the relevant code in Spring Data and also provide a prediction mechanism for the JndiObjectFactoryBean it doesn't feel very natural to place that setup in Spring Data itself as it shouldn't really care about JNDI.

So it would be cool if there was a general prediction mechanism deployed that uses an annotation on one of the FactoryBean's setters to identify the property as target type property and use that predicted type.


Issue Links: - #16105 getBeanNamesForType should consider FactoryBean generics for early introspection of config classes as well - DATAJPA-813 Error creating DefaultJpaContext bean in test cases

Comment From: jhoeller

Superseded by the introduction of FactoryBean.OBJECT_TYPE_ATTRIBUTE in #23338.