0
私は勉強中ですウェルドイベントからjboss weld event tutorialまでです。イベントが発生したときにそれを見て、プリントヘルラーを見てみましょう。 溶接でイベントを使用する方法(cdi)
この
は私のコードです://MyEvent when it was fired, print HelloWorld
public class MyEvent{}
//observe MyEvent and when it happen print HelloWorld
public class EventObserver {
public void demo(@Observes MyEvent event){
System.out.println("HelloWorld");
}
}
//Main Class fire Event in demo method
public class EventTest {
@Inject @Any Event<MyEvent> events;
public void demo(){
Weld weld = new Weld();
WeldContainer container = weld.initialize();
events.fire(new MyEvent());
container.shutdown();
}
public static void main(String[] args){
EventTest test = new EventTest();
test.demo();
}
}
それdoesntの仕事と例外情報の下に与える:
Exception in thread "main" java.lang.NullPointerException
at weldLearn.event.EventTest.demo(EventTest.java:18)
at weldLearn.event.EventTest.main(EventTest.java:24)
それは番目のようですEREは、初期化することができ、コンテナには豆ません
Event<MyEvent> events;
その後、私はそれが私の beans.xmlのが
- は、たぶん私はで何かを行う必要が空である、ランニング作るために何をすべきかbeans.xml?
- またはJavaクラスを作成する必要がありますイベントインターフェイス?
何かが評価されます。
注入のクラスはコンテナの一部でなければなりません。つまり、コンテナの作成後にインスタンス化され、クラスの注釈があります。注釈をEvent、EventObserverに追加し、EventTestをboostrap作成コンテナと@ Injectableクラスに分割する必要があります。 beans.xmlはBeanを定義できますが、EventTestクラスを分割しない限り、まだ助けになりません。 –
@ Alexander Anikin '@Inject @Anyイベントイベント;イベントに注釈を追加したと思いますが、ここで問題は発生します。私はあなたのアイデアを完全に理解していないと思う、詳細を教えてくれますか?ありがとうございました。 –
EventTestでは、コンテナインジェクションを直接使用することはできません。インジェクションは、インスタンスが作成されたタイムクラスによって処理されないためです。ここでJava SE 6の例を見てください:https://antoniogoncalves.org/2011/01/12/bootstrapping-cdi-in-several-environments/ –