Простой вопрос о Spring IoC - PullRequest
1 голос
/ 07 марта 2011

Давайте представим, что есть 1000 классов (X1 ... X1000), которые все определены в библиотеке abc.jar.

Классы X * использовали некоторые аннотации JSR-330, например:

class X12 {

    @Inject
    Foo foo;

    @Inject
    Bar bar;

}

Мой основной класс - это контрольный пример @RunWith(SpringJUnit4ClassRunner.class), и ссылки Foo, Bar четко определены в XML-файлах bean-компонентов.

Вопрос в том, я неЯ не хочу определять X1 ... X1000 в любых файлах XML.Но я хотел бы автоматически подключить их, например:

X173 x173 = new X173();

Но проблема в том, что при использовании нового экземпляра Java foo / bar не подключается.

Это также не работает:

X173 x173 = applicationContext.getBean(X173.class);

, поскольку не определен bean-компонент для X173.

И, X173 также может содержать член класса X258, который также должен быть подключен.Я не могу понять, как это реализовать, пока не решу этот вопрос.

Ответы [ 2 ]

3 голосов
/ 07 марта 2011

Вы можете использовать автоопределение , чтобы объявить их как бобы Spring.

Самый очевидный способ - добавить эти классы к аннотациям Spring, таким как @Component, а затем добавить <context:component-scan /> в ваш XML.

Если аннотирование не поддерживается, <context:component-scan /> поддерживает настраиваемые фильтры. Например, если эти классы на самом деле названы X1...X1000, вы можете использовать фильтр регулярных выражений:

<context:component-scan base-package="com.example">
     <context:include-filter type="regex" expression="com\.example\.X\d{1,4}"/>
</context:component-scan>
0 голосов
/ 07 марта 2011

Хорошо.Есть разные виды тестирования.Давайте посмотрим и на них.

  • В модульном тестировании вы должны протестировать один класс и смоделировать его зависимость.Таким образом, вы должны избегать любого инжектора.

  • При интеграции вы должны проверить взаимодействие некоторых классов, чтобы вы могли использовать инжектор, как в обычном приложении.

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