Как использовать пружину для разрешения зависимостей объекта, созданного вручную?

Если Вы хотите преподавать основы программирования, не будучи конкретным языком, существует приложение, названное Царапина , который был создан в MIT. Это разработано, чтобы помочь людям разработать навыки программирования. Поскольку пользователи создают проекты Царапины, они учатся создавать условия, циклы, и т.д. существует также сообщество проектов царапины, форма, какие проекты могут быть загружены - тот способ, которым можно исследовать программы других людей и видеть, как они были созданы.

5
задан Alexandre 26 November 2009 в 18:09
поделиться

3 ответа

Изменить: Метод I ' m, описанный в моем исходном ответе ниже, является общим способом выполнения DI вне контейнера. Для вашей конкретной потребности - тестирования - я согласен с ответом DJ. Намного более целесообразно использовать поддержку тестов 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'd.

3
ответ дан 14 December 2019 в 13:38
поделиться

См. Метод autowire () в классе AutowireCapableBeanFactory . Если вы используете ClasspathXmlApplicationContext , вы можете получить фабрику с помощью getAutowireCapableBeanFactory ()

. Чтобы получить ApplicationContext, вам нужно будет использовать статический синглтон или другой центральный репозиторий, такой как JNDI или Контейнер сервлета. См. DefaultLocatorFactory о том, как получить экземпляр ApplicationContext.

2
ответ дан 14 December 2019 в 13:38
поделиться

Если вам нужно то, что вам нужно для тестирования, Spring имеет хорошую поддержку для сценария, который вы описали выше.

См. раздел Справочного руководства Spring по тестированию

1
ответ дан 14 December 2019 в 13:38
поделиться
Другие вопросы по тегам:

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