2013-12-12 3 views
10

Я хотел бы использовать инъекцию зависимостей в большом автономном приложении Java 7, но я не уверен, с чего начать.Injection Dependency в автономном приложении Java 7

Я написал небольшое приложение тест:

public class Main { 

    @Inject 
    MyInterface myInterface; 

    public static void main(String[] args) { 

     Main m = new Main(); 
     System.out.println(m.myInterface.getMessage()); 

    } 

} 

с интерфейсом:

public interface MyInterface { 

    String getMessage(); 

} 

и реализации интерфейса:

@Singleton 
public class MyInterfaceImpl implements MyInterface { 

    public String getMessage() { 
     return "Hello World!"; 
    } 

} 

pom.xml содержит одну зависимость:

<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

Это приложение компилируется, но, конечно же, при попытке распечатать сообщение оно сбой NPE. Инъекции не произошло.

Итак, мой вопрос являются:

  1. Может Dependency Injection быть достигнуто в виде отдельного приложения Java 7?
  2. Какие еще зависимости я должен включить, чтобы заставить его работать?
  3. У кого-нибудь есть простой операционный пример для совместного использования (я не мог найти его)?
+0

Какое у вас определение автономного приложения? –

+0

Не требуется веб-сервер/контейнер для запуска ... Java SE ... – JVerstry

ответ

12

Существует не только один способ использования инъекции зависимостей с Java.

(1) Можно использовать, например, стандартный CDI, где эталонная реализация - Weld. Существует документация о using Weld in a Java SE environment, что, вероятно, вы имеете в виду под номером автономное приложение.

Вы также можете использовать Spring Framework, который также поддерживает общую аннотацию CDI (например, @Inject). В этом случае вы, как правило, создаете ClasspathXmlApplicationContext при запуске программы, и пусть Spring управляет (создает/уничтожает) все необходимые вам компоненты.

(2) Ваши текущие зависимости импортируют API Java EE. Таким образом, я не удивлен, если вы получите NullPointerException при исполнении. Вам нужно добавить реализацию (например, Weld) или использовать Spring.

(3) См. Ссылки выше.

Также обратите внимание на Differences between Java EE 6 CDI Implementations, чтобы получить ссылку на другие доступные реализации Java CDI.

+0

Сварить, никогда не слышал об этом. Чтение документа, отлично выглядит ... – JVerstry