Итак, моя первая попытка на CDI подошла к собакам. Я прочитал тонну статей и без особых усилий пробовал множество простых и сложных примеров. Вот мой текущий, простой пример. Что я делаю не так?Java CDI не пинает
Maven проекта:
beans.xml (находится в SRC/основные/ресурсы/META-INF)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1"
bean-discovery-mode="all">
</beans>
Printer.java
import javax.inject.Inject;
public class Printer {
@Inject Greeting greeting;
}
Greeting.java
import javax.enterprise.inject.Default;
@Default
public class Greeting {
public void sayStuff(){ System.out.println("Stuff"); }
}
Main.java
public class Main {
public static void main(String[] args) {
new Printer().greeting.sayStuff();
}
}
Ошибка
Он строит хорошо, но при попытке ред запустить я получаю ошибку
Исключение в потоке "главный" java.lang.NullPointerException в com.foo.app.CDI_test.Main.main (Main.java:5)
который именно тогда, когда я пытаюсь вызвать sayStuff()
на приветствие-свойство. Почему это не создается? Учебники требуют, чтобы @Default также был чрезмерным. Я попытался использовать как инъекцию, так и инъекцию, а не сигару.
EDIT 1 - добавлены зависимостей pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
<version>2.2.4.Final</version>
</dependency>
</dependencies>
РЕДАКТИРОВАТЬ 2 - информация о версии
- Java 1.7
- Затмение Луны 4.4.0
- IntelliJ IDEA 13.1.4
Weld CDI не должен зависеть от того, что он является webapp, не так ли? – krystah
необходимо инициализировать сварку, см. Мое обновление –
Это не должно быть необходимым, я прочитал как минимум 5 разных статей, в которых бобы извлекаются без явного запроса через контейнер! – krystah