Skip to content

Improve target bean type detection for FactoryBeans [SPR-13986] #18558

Closed as not planned
@spring-projects-issues

Description

@spring-projects-issues

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:

Metadata

Metadata

Assignees

No one assigned

    Labels

    in: coreIssues in core modules (aop, beans, core, context, expression)status: supersededAn issue that has been superseded by anothertype: enhancementA general enhancement

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions