春豆的定制分辨率

时间:2011-10-13 16:57:21

标签: spring

我有一个类层次结构,其中可以请求顶层接口或任何具体实现进行注入。这个特定的代码区域由自动装配主导,因此bean不受名称约束 - 只是类。

我想要做的是避免在请求具体实现时使用指定bean名称或使用限定符。这是一个相当独特的情况,其中类描述了使用上下文,并且只有一个类可用。有没有办法挂钩Spring的bean解析机制,以告诉它使用哪个bean?现在,它找到x + 1个有效匹配,其中x是类层次结构中的父类。

在我看来,实现此目的的最佳方法是使用CustomAutowireConfigurer在所有BeanFactorys上设置我自己的AutowireCandidateResolver。是否有更容易的不同FactoryBean实现?在决定返回哪个bean之前,我基本上希望看到一个DependencyDescriptor。

1 个答案:

答案 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;
    }
}