Java Spring Проблема с аннотациями - PullRequest
1 голос
/ 25 июля 2011

У меня проблема с весной. Я заменяю конфигурацию Spring на основе XML-файлов конфигурацией на основе аннотаций. Из-за этого я столкнулся со следующей проблемой. Theres класс, где одно поле настраивается с помощью автопроводки на основе классов. С тех пор был только один кандидат. Но теперь есть более чем один кандидат, потому что я добавил тег @Named для нескольких классов одного и того же интерфейса.

Вот пример кода: Класс с полем автопроводки:

public class AutowiringClass<X, Y> {
    // This is the field which is autowired
    private Autowired<X, Y> bean;
    .....
}

Затем существует второй класс, который расширяет AutoWiringClass определенными общими аргументами:

public class TestClass extends AutoWiringClass<ObjectX, ObjectY> {
    .....
}

Проблема в том, что Spring не знает, какой класс он должен использовать, поскольку существует более одного класса класса Autowiring, но с различными универсальными типами (ObjectX, ObjectY). Я думал, что разные универсальные типы будут делать то же самое .. но они этого не делают :( Было бы здорово, если бы у кого-нибудь было решение для этого.

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Квалификаторы - это то, что вы ищете. Когда вы регистрируете класс как bean-компонент Spring (используя @Component или т.п.), вы можете передать имя в качестве аргумента. Затем, когда вы автоматически подключаете свойство, добавьте аннотацию @Qualifier с именем этого компонента. Итак:

@Component("Test1")
public class Test { }
@Component("Test2")
public class BetterTest extends Test {}

public class TestUser {
  @Autowired
  @Qualifier("Test1")
  private Test test;
}
0 голосов
/ 25 июля 2011

Обобщения не помогут вам из-за стирания типа , Spring ничего не может с этим поделать. Но вы можете использовать аннотацию @Primary для обозначения реализации по умолчанию, которая должна всегда использоваться, или переключиться на автопроводку по имени, а не по типу. Тогда Spring будет использовать имя поля в случае сомнений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...