2014-02-03 2 views
0

Предыдущая проблема:Можно ли объявлять сложные зависимости классов через сканирование Spring Component?

У меня есть зависимость от объекта, такая как это. A -> B -> C. Существует множество реализаций C. И, как результат, будет множество экземпляров A, таких как для каждой реализации для экземпляров C = A. Существует только 1 реализация А. Это не однозначно. Ради примера, C = 5.

Текущее решение:

мне нужна карта зависимостей для определения 5 бобов, каждый из типа A. Это делается с помощью пружины и XML-конфигурации на основе. Было бы 5 bean defs для A, 5 bean defs для каждой из реализаций C. Каждый из атрибутов A bean будет ссылаться на их собственную уникальную реализацию C в качестве компонента.

Я использую подход SOLID OOP, который предусматривает запись в среднем более 50-150 строк. Сначала я использую разделение проблем. Затем я связываю эти классы с использованием инверсии зависимостей. Это создает отношение объектов, которое, конечно, является ориентированным ациклическим графом, основанным на зависимостях.

Новая проблема:

Я сопоставляюсь все эти виды отношений объекта зависимостей, прежде чем в конфигурации весны XML. И все получилось хорошо. Один из недостатков заключался в том, что XML был длинным, казался повторяющимся, и сам XML, представляя такое отношение, читать не очень легко.

Я хочу изучить сопоставление этих отношений объектов, используя только настроенную аннотацию, но я не видел никаких примеров или документации, где он позволяет мне устанавливать иерархии зависимостей.

+0

был конфигурацией ниже, что вы искали? –

+0

Я так думаю ... когда у меня есть шанс попробовать, я обязательно обновлю вопрос. Благодаря! – Zombies

ответ

1

С @Qualifier аннотации Можно вводить бобы по имени, так что-то вроде этого можно:

@Configuration 
public class ClassCConfig { 

    @Bean(name = "c1") 
    public C createrC1() { 
     returns new C(); 
    } 

    @Bean(name = "c2") 
    public C createrC2() { 
     ... 
    } 

    @Bean(name = "c3") 
    public C createrC3() { 
     ... 
    } 

    .... 

А затем вводит шланг в различных случаях A:

@Configuration 
public class ClassAConfig { 

    @Autowired 
    @Qualifier("c1") 
    private C c1; 

    @Autowired 
    @Qualifier("c2") 
    private C c2; 

    ... 

    @Bean(name = "a1") 
    public A createA1() { 
     ... 
    } 

    @Bean(name = "a2") 
    public A createA2() { 
     ... 
    } 

С этим это возможно подключить любое дерево бобов, используя только Java (отсканированную) конфигурацию.

+0

@jhaddesdev Я пробовал это, однако есть проблема. В классе JavaConfig автоуведованные бобы являются нулевыми. EG: 'c1' автоуведомлен. Он ссылается на 'createA1()'. Unfortanuetly 'c1' не автоопределяется до того, как запущен метод' @ Bean' 'createA1()'. Поэтому 'c1' имеет значение null. В основном я не могу использовать Autowire beans в классе конфигурации. – Zombies

+0

А, ошибка с моей стороны. Я создавал Bean для C внутри конфигурации, которая была autowiring. Это было автообновлено, но я попытался получить доступ к его охвату. Я понял. – Zombies

Смежные вопросы