DIContainerの理解度をチェックします。下記の問題に関して当てはまるものを1つ選んでチェックを入れたら、下の「解答へGO」ボタンをクリックしてください。
【問題1】
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd">
【問題1】 S2ContainerFactoryクラスを使用してS2Containerを生成する場合、使用するメソッドはどれでしょうか? ヒント:S2Containerの生成を参照してください。
【問題2】 examples/container/ccc.diconからS2Containerを生成する場合、S2ContainerFactory#create()メソッド内に 指定する正しいPathの指定方法は以下のどれでしょうか? ヒント:S2Containerの生成を参照してください。
【問題1】 S2Containerに登録されているコンポーネントを取得する場合、使用するメソッドはどれでしょうか? ヒント:コンポーネントの取得を参照してください。
【問題2】 hello.diconファイルに定義してある<component>タグのname属性が"message"というコンポーネントを取得する場合、 正しい記述は以下のどれでしょうか? examples/component/hello.dicon
<components> <component name="message" class="examples.component.Message"/> </components>
【問題3】 message.diconファイルに定義してあるコンポーネントを取得する場合、 正しい記述は以下のどれでしょうか?ただし、MessageImpl.javaはMessage.javaを実装しているものとする。 examples/component/message.dicon
<components> <component class="java.util.HashMap"/> </components>
【問題4】 examples/component/hello.dicon
<components> <component name="aaa" class="java.util.ArrayList"/> </components>
S2Container container = S2ContainerFactory.create("examples/component/hello.dicon"); container.getComponent([1]);
【問題5】 examples/component/hello.dicon
<components> <component class="examples.component.AaaHelloImpl"> <arg>"Hello World!"</arg> </component> <component class="examples.component.BbbHelloImpl"> <arg>"Hello World!"</arg> </component> </components>
S2Container container = S2ContainerFactory.create("examples/component/hello.dicon"); Hello hello = (Hello)container.getComponent(Hello.class); hello.showMessage();
public void showMessage();
【問題6】 examples/exception/message.dicon
<components> <component class="examples.exception.MessageImpl"/> </components>
public MessageImpl(Message message) { this.message = message; } public void showMessage() { System.out.println("Hello World!"); }
S2Container container = S2ContainerFactory.create("examples/exception/message.dicon"); Message message = (Message)container.getComponent(Message.class);
【問題7】
<components> <component class="example.container.HelloImpl"> <initMethod name="setAaa"> <arg>"hoge"</arg> </initMethod> </component> </components>
public void setAaa(int aaa) { _aaa = aaa; }
【問題8】 root.dicon
<components> <include path="sample/container/child.dicon" /> <include path="sample/container/child2.dicon" /> </components>
S2Container container = S2ContainerFactory.create("root.dicon"); S2Container childContainer = container.getDescendant("sample/container/child3.dicon");
【問題9】 /example/container/hoge.diconからS2Containerを生成する場合、 org.seasar.framework.container.ExtensionNotFoundRuntimeExceptionが発生するのは、以下のどれでしょうか? ヒント:コンポーネントの取得を参照してください。
【問題1】 コンストラクタ・インジェクションを用いて、examples.dicon.HelloConstructorInjectionクラスの コンストラクタの引数に文字列"Hello"を設定する場合、以下の定義で[1]に入るタグはどれでしょうか? ただし、S2Containerに他のコンポーネントは登録されていないものとする。 examples/dicon/hello.dicon
<components> <component name="hello" class="examples.dicon.HelloConstructorInjection"> [1] </component> </components>
【問題1】 セッター・インジェクションを用いて、examples.dicon.MessageSetterInjectionクラスの セッター・メソッド(setMessage)の引数に文字列"Test"を設定する場合、 以下の定義で[1]に入るタグはどれでしょうか? examples/dicon/hello.dicon
<components> <component name="message" class="examples.dicon.MessageSetterInjection"> [1] </component> </components>
【問題1】 メソッド・インジェクションを用いて、java.util.DateクラスのsetTimeメソッドに0を設定する場合、以下の定義で[1]に入るタグはどれでしょうか?
<component class="java.util.Date"> [1] </component>
【問題1】 <component>タグのautoBinding属性を省略した場合、autoBinding属性には何が設定されるでしょうか? ヒント:自動バインディングを参照してください。
【問題2】 <component>タグのautoBinding属性を指定して自動バインディングができないように設定するには、 <component>タグのautoBinding属性に何を指定するでしょうか? ヒント:自動バインディングを参照してください。
【問題3】 コンポーネント名がmapのコンポーネントに定義されている値をMessageImplクラスのコンストラクタに自動バインディングしたい場合、 以下の定義の[1]に何を入れるでしょうか? examples/auto/message.dicon
<components> <component name="map" class="java.util.HashMap"> <initMethod name="put"> <arg>"aaa"</arg> <arg>111</arg> </initMethod> </component> <component [1] class="examples.auto.MessageImpl"/> </components>
public MessageImpl(Map message){ this.message = message; }
【問題4】 examples/auto/message.dicon
<components> <component class="java.util.HashMap"> <initMethod name="put"> <arg>"aaa"</arg> <arg>111</arg> </initMethod> </component> <component autoBinding="constructor" class="examples.auto.Message"/> </components>
public Message([1] message){ this.message = message; }
【問題5】 examples/auto/HelloImpl.dicon
<components> <component class="examples.auto.MessageImpl"> <initMethod name="setMessage"> <arg>"Hello World!"</arg> </initMethod> </component> <component autoBinding="constructor" class="examples.auto.HelloImpl"/> </components>
public HelloImpl(){ System.out.println("Hello"); } public HelloImpl(Message message) { System.out.println("Hello"); } public HelloImpl(Message message1, Message message2){ System.out.println("Hello"); }
public void setMessage(); public void showMessage();
public void setMessage(StringBuffer message){ message_.append(message); } public void showMessage(){ System.out.println(message_); }
【問題6】 examples/auto/message.dicon
<components> <component class="java.util.ArrayList"> <initMethod name="add"> <arg>"testMessage"</arg> </initMethod> </component> <component autoBinding="constructor" class="examples.auto.MessageImpl"/> </components>
public MessageImpl(List list) { this.list = list; } public MessageImpl(List list1, List list2){ this.list1 = list1; this.list2 = list2; } public MessageImpl(List list1, List list2, String message){ this.list1 = list1; this.list2 = list2; this.message = message; } private MessageImpl(List list1, List list2, List list3){ this.list1 = list1; this.list2 = list2; this.list3 = list3; }
【問題7】 以下のようにdiconファイルを定義し、実装クラスMessageImplのセッターメソッドに自動バインディングする場合、examples/auto/MessageImpl.javaのセッターメソッドで間違った定義をしているのはどれでしょうか? examples/auto/message.dicon
<components> <component class="java.util.Hash"> <initMethod name="put"> <arg>"test"</arg> <arg>"MessageTest"</arg> </initMethod> </component> <component autoBinding="property" class ="examples.auto.MessageImpl"/> </components>
【問題8】 hello.diconで定義しているコンポーネントの値を自動バインディングできるように実装クラスHelloImplのセッターメソッドを正しく定義しているのはどれでしょうか? examples/auto/hello.dicon
<components> <component class="java.util.ArrayList"> <initMethod name="add"> <arg>"Hello!"</arg> </initMethod> </component> <component autoBinding="property" name="message" class ="examples.auto.HelloImpl"/> </components>
【問題9】 以下のように定義した場合、実装クラスMessageImplのどのセッターメソッドが呼ばれるでしょうか? ただし、HelloImpl.javaはHello.javaを実装しているものとする。 examples/auto/message.dicon
<components> <component class="examples.auto.HelloImpl"> <initMethod name="addHelloMessage"> <arg>"Hello"</arg> </initMethod> </component> <component autoBinding="property" class="examples.auto.MessageImpl"/> </components>
public void setMessage(){ System.out.println("Hello!"); } public void setMessage(Hello hello){ this.hello = hello; } public void setMessage(Hello hello, Hello hello2){ this.hello = hello; this.hello2 = hello2; } public void setMessage(Hello hello, Hello hello2, Hello hello3){ this.hello = hello; this.hello2 = hello2; this.hello3 = hello3; }
public void showHelloMessage();
public void addHelloMessage(StringBuffer hello){ hello_.append(hello); } public void showHelloMessage(){ System.out.println(hello_); }
【問題10】 examples/exception/message.dicon
<components> <component name="map" class="java.util.HashMap"> <initMethod name="put"> <arg>"hello"</arg> <arg>"Hello World!"</arg> </initMethod> </component> <component autoBinding="auto" name="message" class="examples.exception.MessageImpl"/> </components>
public MessageImpl(Map map) { this.map = map; } public void setMessage(Map map) { this.map = map; }
【問題1】 以下のように定義されていた場合、コンポーネントの検索順序として 正しいのはどれでしょうか? examples/include/foo.dicon
<components> <include path="aaa.dicon"/> <include path="bbb.dicon"/> <component class="examples.include.Foo" /> </components>
【問題2】 以下のように定義し、Mainクラスを実行すると何が表示されるでしょうか? examples/include/app.dicon
<components> <include path="examples/include/aaa.dicon"/> <include path="examples/include/bbb.dicon"/> <component name="root" class="examples.include.HelloImpl"/> </components>
<components> <component class="java.util.HashMap"> <initMethod name="put"> <arg>"hello"</arg> <arg>"Hello Aaa!"</arg> </initMethod> </component> <component name="aaa" class="examples.include.HelloImpl"/> </components>
<components> <component class="org.seasar.framework.util.ArrayMap"> <initMethod name="put"> <arg>"hello"</arg> <arg>"Hello Bbb!"</arg> </initMethod> </component> <component name="bbb" class="examples.include.HelloImpl"/> </components>
public void HelloImpl(Map hello) { hello_ = hello; } public void showMessage() { System.out.println(hello_.get("hello")); }
S2Container container = S2ContainerFactory.create("examples/include/app.dicon"); Hello hello = (Hello)container.getComponent("root"); hello.showMessage();
【問題3】 問題2の定義を使用し、Mainクラスでコンポーネント名がbbbというコンポーネントを取得した場合は何が表示されるでしょうか? examples/include/Main.java
S2Container container = S2ContainerFactory.create("examples/include/app.dicon"); Hello hello = (Hello)container.getComponent("bbb"); hello.showMessage();
【問題1】 child.diconで登録したコンポーネントをAaaHellomplにセットする場合、[1]には以下のどれが入るでしょうか? examples/division/root.dicon
<components namespace="root"> <include path="examples/division/child.dicon"/> <component name="aaa" class="examples.division.AaaHelloImpl"> <arg>[1]</arg> </component> <component name="bbb" class="java.lang.String"> <arg>"World!"</arg> </component> </components>
<components namespace="child"> <component name="bbb" class="java.lang.String"> <arg>"Hello"</arg> </component> </components>
public AaaHelloImpl(String message) { this.message = message; } public void showMessage() { System.out.println(message); }
【問題1】 <component>タグのinstance属性を省略した場合、instance属性には何が設定されるでしょうか? ヒント:インスタンス管理を参照してください。
【問題2】 examples/instance/message.dicon
<components> <component name="message" class="java.util.HashMap"> <initMethod name="put"> <arg>"hello"</arg> <arg>"hoge"</arg> </initMethod> </component> </components>
S2Container container = S2ContainerFactory.create("examples/instance/message.dicon"); Map map = (Map)container.getComponent(Map.class); map.put("hello", "world!"); Map map2 = (Map)container.getComponent(Map.class); System.out.println(map.get("hello"));
【問題3】 セッション毎に1つのインスタンスを作成したい場合、<component>タグのinstance属性に何を指定するでしょうか? ヒント:インスタンス管理を参照してください。
【問題4】 リクエスト毎に1つのインスタンスを作成したい場合、<component>タグのinstance属性に何を指定するでしょうか? ヒント:インスタンス管理を参照してください。
【問題5】 S2Container外で作成したコンポーネントのインスタンスを取得し、 Dependency Injectionする場合、以下の[1]に入る正しい答えはどれでしょうか? examples/instance/HelloWorld.java
public static void main(String[] args) { S2Container container = S2ContainerFactory.create("examples/instance/hello.dicon"); Message message = new Message(); [1] message.showMessage(); }
<components> <component instance="outer" class="examples.instance.HelloImpl"> <property name="message"> "Hello World!" </property> </component> </components>
public void setMessage(String message){ this.message = message; } public void showMessage(){ System.out.println(message); }
【問題6】 以下のように定義し、外部コンポーネントに値を設定する場合、helloMainクラスを実行すると以下のどのメッセージが表示されるでしょうか?
<components namespace="aaa"> <component name="map" instance="outer" class="java.util.HashMap"> <initMethod name="put"> <arg>"hello"</arg> <arg>"Hello World!"</arg> </initMethod> </component> </components>
S2Container container = S2ContainerFactory.create("example/include/hello.dicon"); Map hashMap = new HashMap(); container.injectDependency(hashMap, HashMap.class); System.out.println(hashMap.get("hello"));
【問題7】 example/include/array.dicon
<components> <component name="array" instance="outer" class="org.seasar.framework.util.ArrayMap"> <initMethod name="put"> <arg>"hoge"</arg> <arg>"foo"</arg> </initMethod> </component> </components>
S2Container container = S2ContainerFactory.create("example/include/array.dicon"); Map hashMap = new HashMap(); container.injectDependency(hashMap, "array");
【問題1】 S2Containerの開始時にmapコンポーネントのHashMap(keyが"aaa")に111を設定し、S2Containerの終了時にmapコンポーネントのHashMap(keyが"aaa")にnullをセットしたい場合、[1]と[2]には入る正しい組み合わせはどれでしょうか?
<components namespace="bar"> <component name="map" class="java.util.HashMap"> <[1] name="put"> <arg>"aaa"</arg> <arg>111</arg> </[1]> <[2] name = "put"> <arg>"aaa"</arg> <arg>null</arg> </[2]> </component> </components>
【問題2】 exmples/lifecycle/hello.dicon
<components> <component name="map" class="java.util.HashMap"> <initMethod name="put"> <arg>"hello"</arg> <arg>"Hello World!"</arg> </initMethod> <destroyMethod name="put"> <arg>"hello"</arg> <arg>null</arg> </destroyMethod> </component> <component name="list" class="java.util.ArrayList"> <initMethod name="add"> <arg>"Hello "</arg> </initMethod> <destroyMethod name="clear"/> </component> <component name="message" class="examples.lifecycle.MessageImpl"/> </components>
S2Container container = S2ContainerFactory.create("examples/lifecycle/hello.dicon"); Message message = (Message)container.getComponent(Message.class); container.destroy();
public MessageImpl(Map map, List list) { this.map = map; this.list = list; }
【問題3】 example/lifecycle/hello.dicon
<components namespace="bar"> <component name="map" instance="prototype" class="java.util.HashMap"> <initMethod name="put"> <arg>"aaa"</arg> <arg>"Hello World!"</arg> </initMethod> <destroyMethod name="put"> <arg>"aaa"</arg> <arg>null</arg> </destroyMethod> </component> </components>
S2Container container = S2ContainerFactory.create(PATH); Map map = (Map)container.getComponent("map"); container.destroy(); System.out.println(map.get("aaa"));
【問題1】 S2Containerは何という名前で登録されているでしょうか? ヒント:コンポーネントでS2Containerを利用するを参照してください。
【問題2】 BarImpl.javaでS2Containerのインスタンスを取得したい場合、[1]には何が入るでしょうか?
<component class="examples.s2container.BarImpl"> [1] </component>
public BarImpl(S2Container container) { this.containere = container; }
【問題1】 SingletonS2ContainerFactory#initで生成したS2Containerを取得するには、SingletonS2ContainerFactoryクラスのどのメソッドを使用するでしょうか? ヒント:S2ContainerServletを参照してください。
【問題2】 S2ContainerServletについての記述で正しくない説明はどれでしょうか?
【問題3】
<servlet> <servlet-name>s2servlet</servlet-name> <servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>configPath</param-name> <param-value>app.dicon</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> </servlet>
【問題1】 次の文の[]にあてはまる言葉で正しい組み合わせはどれでしょうか? すべてのS2Container定義のルートになる定義ファイルは、慣例で[1]という名前にします。 [1]には[2]の定義はしないようにしてください。 ヒント:app.diconの役割を参照してください。
【問題1】 example/meta/message.dicon
<components> <meta>"hello"</meta> <meta>"world"</meta> <meta>"message"</meta> </components>
S2Container container = S2ContainerFactory.create("example/meta/message.dicon"); MetaDef meta = container.getMetaDef(2); System.out.println(meta.getValue());
【問題2】 example/meta/hello.dicon
<components> <meta name="hello world">"Hello World!"</meta> <meta name="world">"world"</meta> <meta name="hello" >"hello"</meta> </components>
S2Container container = S2ContainerFactory.create("example/meta/hello.dicon"); MetaDef meta = container.getMetaDef([1]);
【問題3】 example/meta/hello.dicon
<components> <meta name="hello">"Hello"</meta> <meta name="hello">"World!"</meta> <meta>"hello"</meta> </components>
S2Container container = S2ContainerFactory.create("example/meta/hello.dicon"); MetaDef[] meta = container.getMetaDefs("hello"); for(int i=0; i<meta.length; i++){ System.out.println(meta[i].getValue()); }
<component class="java.lang.String"> <arg>[1]</arg> </component>
【問題2】
public class SampleChar { public setSampleChar(char a) { : } }
<component class="test.java.sample.SampleChar"> <property name="sampleChar">[1]</property> </component>
public class SampleBoolean { public SampleBoolean(boolean isA) { : } }
<component class="test.java.sample.SampleBooleam"> <arg>[1]</arg> </component>
【問題4】
public class SampleConst { public SampleConst(String message) { : } }
<component name="message"> [1] </component> <component class="example.ogin.SampleConst"> <arg>message</arg> </component>
【問題5】 以下のdiconファイルで、java.lang.Math#max(int a,int b)のstaticなメソッドを呼び出した結果を参照する場合、[1]に入る記述で正しいのどれでしょうか?
<component name="max"> [1] </component>
【問題6】 OGNL式の記述で間違っている項目は、どれでしょうか? ヒント:OGNL式を参照してください。
public class FooMessage { public String getMessage() { return "foo"; } }
<component name="foo" class="test.java.sample.FooMessage"/> <component name="message"> [1] </component>
【問題8】 java.util.HashMap#put()にメソッドインジェクションで値を設定する場合、以下の[1]に入る正しい項目はどれでしょうか?
<components> <component name="map" class="java.util.HashMap"> <initMethod>[1]</initMethod> </component> </components>
【問題9】 <initMethod>タグが呼ばれたときにコンソールに文字列"Hello"を表示したい場合、[1]には何が入るでしょうか?
<components> <component name="map" class="java.util.HashMap"> <initMethod>[1]("Hello")</initMethod> </component> </components>
【問題10】 <initMethod>タグが呼ばれたときにコンソールにエラーメッセージを表示したい場合、[1]には何が入るでしょうか?
<components> <component name="list" clas="java.util.ArrayList"> <initMethod>[1]("error")</initMethod> </component> </components>
【問題11】 <initMethod>タグ内で有効でないオブジェクトは以下のどれでしょうか?