Редактировать: Метод, который я описываю в своем первоначальном ответе ниже, является общим способом выполнения DI вне контейнера. Для вашей конкретной потребности - тестирования - я согласен с ответом диджея. Гораздо более целесообразно использовать тестовую поддержку Spring, например:
@Test
@ContextConfiguration(locations = { "classpath*:**/applicationContext.xml" })
public class MyTest extends AbstractTestNGSpringContextTests {
@Resource
private MyDependency md;
@Test
public void myTest() {
...
Хотя приведенный выше пример является тестом TestNG, поддержка Junit также описана в 8.3.7.2. Управление контекстом и кеширование .
Общий подход: Аннотируйте свой класс с помощью @ Configurable и используйте AspectJ время загрузки или время компиляции. См. 6.8.1 в документации Spring для AOP для получения более подробной информации.
Затем вы можете аннотировать переменные вашего экземпляра с помощью @ Resource или @ Autowired . Хотя они выполняют одну и ту же цель внедрения зависимостей, я рекомендую использовать @ Resource , так как это стандарт Java, а не специфичный для Spring.
Наконец, не забудьте использовать ключевое слово transient (или @ Transient для JPA), если вы планируете сериализацию или сохранение объектов в будущем. Скорее всего, вы не хотите сериализовать ссылки на ваш DI-репозиторий, службу или компоненты.