3.4. POJO をお互いに接続
個々の POJO インスタンスは比較的単純な動作のみを提供できます。POJO の実際の価値は POJO をお互いに接続し、複雑なタスクを実行できることにあります。さまざまな給料方針実装を選択するために、POJO をどのようにお互いに接続できますか?
この XML 展開記述子は以下のようになります。
<?xml version="1.0" encoding="UTF-8"?> <deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:jboss:bean-deployer:2.0 bean-deployer_2_0.xsd" xmlns="urn:jboss:bean-deployer:2.0"> <bean name="HRService" class="org.jboss.example.service.HRManager"> <property name="salaryStrategy"><inject bean="AgeBasedSalary"/></property> </bean> <bean name="AgeBasedSalary" class="org.jboss.example.service.util.AgeBasedSalaryStrategy"/> </deployment>
この XML は追加の <bean> 要素を含めることにより選択された給料方針実装を作成します。今回は AgeBasedSalaryStrategy が選択されます。次に、コードは、HRService Bean を使用して作成された
HRManager
のインスタンスにこの Bean への参照を挿入します。挿入は HRManager
クラスに setSalaryStrategy(SalaryStrategy strategy)
メソッドが含まれるため可能です。背後で JBoss Microcontainer は新しく作成された HRManager インスタンスでこのメソッドを呼び出し、AgeBasedSalaryStrategy
インスタンスへの参照を渡します。
以下のコードを記述した場合、XML 展開記述子により、同じイベントシーケンスが発生します。
HRManager hrService = new HRManager(); AgeBasedSalaryStrategy ageBasedSalary = new AgeBasedSalaryStrategy(); hrService.setSalaryStrategy(ageBasedSalary);
適切な setter メソッドを使用して挿入を実行する以外に、JBoss Microcontainer は必要に応じてコンストラクタパラメータを使用して挿入を実行することもできます。詳細については、Part II「POJO 開発 (POJO Development)」の章「挿入 (Injection)」を参照してください。
3.4.1. 特別な考慮事項
展開記述子で <bean> 要素を使用するクラスのインスタンスを作成することは可能ですが、これは必ずしも最良の方法ではありません。たとえば、
Employee
クラスと Address
クラスのインスタンスを作成することは必要ありません。クライアントはユーザーからの入力に応じてこれらのインスタンスを作成します。これらのインスタンスはサービスの一部になりますが、展開記述子で参照されません。
コードのコメント
各 Bean が一意の名前 (上記のように挿入を実行するために使用されます) を持つ限り、展開記述子内で複数の Bean を定義できます。ただし、すべての Bean は必ずしもサービスを表しません。サービスは単一の Bean を使用して実装でき、通常複数の Bean は一緒に使用されます。1 つの Bean は通常サービスエントリポイントを表し、クライアントにより呼び出されるパブリックメソッドを含みます。この例では、エントリポイントは HRService Bean です。XML 展開記述子は Bean がサービスを表すかどうか、または Bean がサービスエントリポイントかどうかを示しません。非サービス Bean からサービス Bean を記述するためにコメントと明確なネーミングスキームを使用することが推奨されます。