我有一个类层次结构,其中可以请求顶层接口或任何具体实现进行注入。这个特定的代码区域由自动装配主导,因此bean不受名称约束 - 只是类。
我想要做的是避免在请求具体实现时使用指定bean名称或使用限定符。这是一个相当独特的情况,其中类描述了使用上下文,并且只有一个类可用。有没有办法挂钩Spring的bean解析机制,以告诉它使用哪个bean?现在,它找到x + 1个有效匹配,其中x是类层次结构中的父类。
在我看来,实现此目的的最佳方法是使用CustomAutowireConfigurer在所有BeanFactorys上设置我自己的AutowireCandidateResolver。是否有更容易的不同FactoryBean实现?在决定返回哪个bean之前,我基本上希望看到一个DependencyDescriptor。
答案 0 :(得分:0)
您是否尝试过直截了当的FactoryBean
:
public class XyzFactoryBean implements FactoryBean<TopLevelInterface> {
@Override
public TopLevelInterface getObject() throws Exception {
if( life is good ) {
return new LifeIsGood();
} else
return new LifeIsBetterThanGood();
}
@Override
public Class<? extends TopLevelInterface> getObjectType() {
if( life is good ) {
return LifeIsGood.class;
} else
return LifeIsBetterThanGood.class;
}
@Override
public boolean isSingleton() {
return false;
}
}