JBossシリーズ70:簡単なCDI Webアプリケーション


概要
本論文では,dependency injection,scope,qualifiersおよびEL統合を簡単なCDI Webアプリケーションにより実証した.アプリケーションの導入が完了したら、http://localhost:8080/moodcheckerWebアプリケーションのウェルカムページにアクセスすると、moodはgoodとbadの間で変化し続けます.本稿ではhow qualifiers influence the selection of an injectorを理解することができる.
コンパイル配置テストアプリケーションこのアプリケーションのソースコードはhttps://github.com/kylinsoong/webframework/tree/master/cdi/moodchecker.
ソフトウェアのインストールと資料のダウンロードで説明した方法でダウンロードし、配置パッケージcdi-moodcheckerをコンパイルして生成することができます.warは、JBoss 7/WildFlyで説明する方法に適用するcdi-moodcheckerを4つの方法で配備する.warからJBossノードへ.アプリケーション配備完了起動JBoss 7は以下の通りである.
./standalone.sh

アプリケーションの導入が完了したら、http://localhost:8080/moodcheckerアクセス、Webページは次のように表示されます.
JBoss 系列七十:一个简单的 CDI Web 应用_第1张图片
サンプル分析
例に含まれるプロファイルまたはjavaクラスは、次のとおりです.
  • beans.xml
  • faces-config.xml
  • index.xhtml
  • web.xml
  • jboss-web.xml
  • org.jboss.demo.cdi.moodchecker.Mood
  • org.jboss.demo.cdi.moodchecker.BadMood
  • org.jboss.demo.cdi.moodchecker.GoodMood
  • org.jboss.demo.cdi.moodchecker.MoodChecker

  • Mood
    Mood類の内容は以下の通りである.
    import javax.enterprise.context.RequestScoped;
    import javax.inject.Inject;
    import javax.inject.Named;
    
    @Named
    @RequestScoped
    public class Mood {
    
    	private String mood;
    	
    	@Inject
    	@Good
    	private MoodChecker moodChecker;
    
    	public Mood() {
    
    	}
    
    	public void check() {
    		mood = moodChecker.checkMood();
    	}
    
    	public String getMood() {
    		return mood;
    	}
    }

    注意:@Nameおよび@RequestScopedタグクラス自体、MoodCheckerプロパティは@Injectおよび@Good注入を使用します.
    Qualifiers
    前のGoodはGoodMoodを注入するためにカスタマイズされた寸法であることに注意してください.ここでは2つの寸法、GoodとBadを作成しました.以下のようにします.
    import java.lang.annotation.Documented;
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    
    import javax.inject.Qualifier;
    
    import static java.lang.annotation.ElementType.FIELD;
    import static java.lang.annotation.ElementType.METHOD;
    import static java.lang.annotation.ElementType.PARAMETER;
    import static java.lang.annotation.ElementType.TYPE;
    import static java.lang.annotation.RetentionPolicy.RUNTIME;
    
    @Qualifier
    @Target({ TYPE, METHOD, PARAMETER, FIELD })
    @Retention(RUNTIME)
    @Documented
    public @interface Good {
    
    }

    我々は
    GoodにはGoodMoodと表示され、以下のように表示されます.
    @Good
    public class GoodMood implements MoodChecker {
    
    	public String checkMood() {
    		return "I feel great !";
    	}
    
    }

    こうして
    Moodに@Goodタグを使用するとGoodMoodが注入されます.
    EL統合
    index.xhtmlはEL式を使用してバックグラウンドBean Moodと直接対話し、index.xhtmlの内容は次のとおりです.
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:f="http://java.sun.com/jsf/core">
    
    <h:head>
    	<title>How Are You Today?</title>
    </h:head>
    <h:body>
    	<h3>How Are You?</h3>
    	<h:form>
    		<p>
    			<h:commandButton value="Check Mood" action="#{mood.check}" />
    		</p>
    		<p>
    			<h:outputText value="#{mood.mood}" />
    		</p>
    
    	</h:form>
    </h:body>
    
    </html>