Если Вы хотите преподавать основы программирования, не будучи конкретным языком, существует приложение, названное Царапина , который был создан в MIT. Это разработано, чтобы помочь людям разработать навыки программирования. Поскольку пользователи создают проекты Царапины, они учатся создавать условия, циклы, и т.д. существует также сообщество проектов царапины, форма, какие проекты могут быть загружены - тот способ, которым можно исследовать программы других людей и видеть, как они были созданы.
Изменить: Метод 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.
См. Метод autowire () в классе AutowireCapableBeanFactory
. Если вы используете ClasspathXmlApplicationContext
, вы можете получить фабрику с помощью getAutowireCapableBeanFactory ()
. Чтобы получить ApplicationContext, вам нужно будет использовать статический синглтон или другой центральный репозиторий, такой как JNDI или Контейнер сервлета. См. DefaultLocatorFactory о том, как получить экземпляр ApplicationContext.
Если вам нужно то, что вам нужно для тестирования, Spring имеет хорошую поддержку для сценария, который вы описали выше.