Как использовать @Autowired для динамического внедрения реализации, как фабричный шаблон

Я новичок в Sprint и использую Spring 3.x и roo1.1.1 для своего приложения.

У меня есть несколько реализаций интерфейса, который будет @Autowired в другие классы. Я мог бы только решить, какую реализацию использовать во время выполнения. Это должно быть достигнуто с помощью шаблона фабрики.

public interface SomeInterface {
    public void doSomething();
}

Реализация 1.

public class SomeOb implements SomeInterface {
    public void doSomething() {
        //Do something for first implementation here
    }
}

Реализация 2. 2) Я попытался создать FactoryBean, например

public class SomeFactoryBean implements FactoryBean<SomeInterface> {
@Override
public SomeInterface getObject() throws Exception {
    if(/*Somecondition*/) {
        return new SomeOb();
    } else
        return new SomeOtherOb();
}

@Override
public Class<? extends SomeInterface> getObjectType() {
    if(/*Somecondition*/) {
        return SomeOb.class;
    } else
        return SomeOtherOb.class;
}

@Override
public boolean isSingleton() {
    return false;
}
}

. В applicationContext.xml у меня есть упомянутый тег.

Когда я запускаю веб-сервер, я сталкиваюсь с ошибкой вроде

No unique bean of type [com.xxxx.xxxx.SomeInterface] is defined: expected single matching bean but found 3: [xxxx, xxxxxxx, xxxxFactory]

. Кто-нибудь может помочь мне решить эту проблему. Если я делаю это неправильно, посоветуйте мне сделать это правильно.

Спасибо и признательны за любую помощь, jjk

5
задан jjk 20 April 2011 в 03:37
поделиться