Я недавно задал этот вопрос относительно извлечения бобов из контекста приложения.Ответ был действительно полезным, но теперь, похоже, у меня проблема с доступом к этому бину из класса вне теста.Другими словами, мой тест создает экземпляр класса, который использует bean-компонент из контекста приложения, но этот bean-компонент продолжает показывать ноль.
Мой тест устанавливает контекст приложения следующим образом:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
public class SearcherTests {
Мой тест программно создает экземпляр класса Repository:
Repository searcher = new Repository();
В классе My Repository есть следующая переменная-член:
@Resource
private MyFactory myFactory;
Если я правильно понимаю Spring, это должно выглядеть в контексте текущего приложения.для боба с именем 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
работает, я включил этот же bean-компонент в качестве переменной-члена так же, как и в классе Repository
.Во время выполнения теста переменная myFactory
в файле, содержащем тест, выглядит именно так, как я и ожидал.Однако, когда я добираюсь до класса Repository
, переменная myFactory
в этом классе является нулевой.Кажется, что этот класс не создает экземпляр переменной myFactory
на основе определения компонента в applicationContext-test.xml
.Может кто-нибудь сказать мне, почему?
Обновление
Я изменил переменную searcher
, чтобы она была бином Spring, а не создавал экземпляр класса Repository
вручную,и теперь переменная myFactory
заполнена в классе Repository
.Может кто-нибудь объяснить, почему это должен быть боб, чтобы работать?