Недавно я спросил this question относительно вытаскивания бобы из приложенияContext. Ответ был действительно полезным, но теперь кажется, что у меня есть проблема с доступом к этому компоненту из класса вне теста. Другими словами, мой тест создает экземпляр класса, который использует компонент из контекста приложения, но этот компонент продолжает расти до нуля.Итак, СЕЙЧАС, почему мой боб null?
Мой тест устанавливает контекст приложения, как это:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
public class SearcherTests {
Мой тест программно инстанцирует Repository класс:
Repository searcher = new Repository();
Мой Repository класс имеет следующую переменную-член:
@Resource
private MyFactory myFactory;
Если я правильно понимаю Весну, это должно выглядеть так, для компонента bean с именем myFactory
. Согласно тесту, текущий контекст приложения должен быть applicationContext-test.xml
, который содержит определение myFactory
:
<bean id="myFactory"
name="myFactory"
class="com.foo.Mocks"
factory-method="createMockFactory" />
В будущем этот метод завод будет возвращать издеваться. Но на данный момент, он просто возвращает регулярный Factory
объект:
public class Mocks {
public static MyFactory createMockFactory() {
return new MyFactory();
}
}
Когда я запустить приложение из моего браузера, переменная myFactory
правильно инстанцированных из определения фасоли в applicationContext.xml
. В моем тесте, чтобы убедиться, что мой applicationContext-test.xml
работает, у меня есть тот же компонент, который указан как переменная-член, как и в классе Repository
. Во время выполнения теста переменная myFactory
в файле, содержащем тест, выглядит так, как я ожидал. Однако, когда я добираюсь до класса Repository
, переменная myFactory
в этом классе равна null. Кажется, что этот класс не создает экземпляр переменной myFactory
, основанной на определении компонента в applicationContext-test.xml
. Может кто-нибудь сказать мне, почему?
Update
Я изменил переменную searcher
так, что это весна фасоли, а не экземпляра класса Repository
вручную, и теперь переменная myFactory
была заселена в Repository
класса. Может кто-нибудь объяснить, почему это должно быть bean для того, чтобы работать?
Как получить `Репозиторий`? Это весенний боб? – axtavt 2010-11-29 18:57:19
Нет, репозиторий не является весенним бобом. Мой тест фактически создает экземпляр класса, который, в свою очередь, создает экземпляр класса Repository. Вся эта реализация выполняется программно. – Samo 2010-11-29 19:09:51