Как соединить Взаимозависимые бобы проводом в Spring?

Вы можете сохранить dataprovider в отдельном классе, а затем аннотировать ваши тесты с помощью dataprovider. Вы можете указать его с помощью dataProviderClass

Цитата из testng doc здесь :

По умолчанию поставщик данных будет искать в текущем тесте класса или одного из его базовых классов. Если вы хотите поместить поставщика данных в другой класс, это должен быть статический метод, и вы указываете класс, где он может быть найден в атрибуте dataProviderClass:

blockquote>
public class StaticProvider {
  @DataProvider(name = "create")
  public static Object[][] createData() {
    return new Object[][] {
      new Object[] { new Integer(42) }
    }
  }
}

public class MyTest {
  @Test(dataProvider = "create", dataProviderClass = StaticProvider.class)
  public void test(Integer n) {
    // ...
  }
}

19
задан Sathish 8 January 2009 в 17:21
поделиться

4 ответа

К сожалению, способ, которым инициализация контейнера работает в Spring, боб, может только быть введен в другом бобе, после того как это полностью инициализируется. В Вашем случае у Вас есть круговая зависимость, которая предотвращает любой боб, который будет инициализирован, потому что они зависят друг от друга. Для обхождения этого, можно реализовать BeanFactoryAware в одном из бобов и получить ссылку на другой боб с помощью beanFactory.getBean ("beanName").

13
ответ дан 30 November 2019 в 04:59
поделиться

neesh является правильным, Spring не делает этого из поля.

Взаимозависимые бобы намекают на проблему проектирования. "Чистый" способ сделать это должно перепроектировать Ваши сервисы таким способом, которым нет таких нечетных зависимостей, конечно при условии, что Вы управляете реализациями.

3
ответ дан 30 November 2019 в 04:59
поделиться

Можно реализовать BeanPostProcessor, который устанавливает зависимость.

Или...

Посмотрите ответ Costin здесь:

http://forum.springframework.org/showthread.php?t=19569&highlight=circular+dependencies

Видит ответ Andreas здесь:

http://forum.springframework.org/showthread.php?t=29572&highlight=circular+dependencies

2
ответ дан 30 November 2019 в 04:59
поделиться

можно расширить ApplicactionContext, которые используют и переопределяют метод createBeanFactory ()

 protected DefaultListableBeanFactory createBeanFactory(){
    DefaultListableBeanFactory beanFactory = super.createBeanFactory();
    // By default this is false;
    beanFactory.setAllowRawInjectionDespiteWrapping( true );
    return beanFactory;
 }

, Это работает, но быть осторожным, потому что это позволяет циклические ссылки.

0
ответ дан 30 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: